Start · Sprachen · PHP · Referenz · Yaf_Controller_Abstract

Yaf_Controller_Abstract

Klasse

Abstrakte Basisklasse für alle Controller im Yaf-MVC-Framework, die Anwendungslogik von der Darstellung trennt.

seit PHP 2.0.0 Kategorie: misc

Signatur

abstract class Yaf_Controller_Abstract

Beschreibung

Yaf_Controller_Abstract ist das Herzstück des MVC-Systems von Yaf (Yet Another Framework). Alle eigenen Controller müssen von dieser abstrakten Klasse erben. Sie stellt die grundlegende Infrastruktur bereit, um Anfragen entgegenzunehmen, Actions auszuführen und die Ausgabe an Views weiterzugeben.

Die Klasse kann nicht direkt instanziiert werden – stattdessen erstellt man konkrete Controller-Klassen (z. B. IndexController extends Yaf_Controller_Abstract), in denen Action-Methoden nach dem Muster actionAction() definiert werden. Yaf routet eingehende HTTP-Anfragen automatisch auf die passende Action-Methode.

Neben dem Zugriff auf Request- und Response-Objekte bietet die Klasse integrierte Methoden zum Weiterleiten (forward()), zum direkten Rendern von Views (render()) und zur Ausgabesteuerung (display()). Über $this->getView() kann die View-Engine angesprochen werden, um Template-Variablen zu übergeben.

Durch die saubere Trennung von Controller-Logik und Darstellungsschicht eignet sich Yaf_Controller_Abstract besonders für performancekritische Anwendungen, da Yaf als C-Extension kompiliert ist und deutlich weniger Overhead als reine PHP-Frameworks erzeugt.

Beispiele

Einfacher Controller mit Index-Action

<?php
// application/controllers/Index.php
class IndexController extends Yaf_Controller_Abstract
{
    // Wird bei /index/index aufgerufen
    public function indexAction(): bool
    {
        // Variable an die View übergeben
        $this->getView()->assign('title', 'Willkommen bei Yaf');
        $this->getView()->assign('items', ['Apfel', 'Birne', 'Kirsche']);
        // Gibt true zurück → Yaf rendert automatisch die passende View
        return true;
    }

    // Wird bei /index/hello aufgerufen
    public function helloAction(): void
    {
        $name = $this->getRequest()->getParam('name', 'Welt');
        // Direkte Ausgabe, kein automatisches View-Rendering
        echo 'Hallo, ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '!';
        // Automatisches Rendering deaktivieren
        Yaf_Dispatcher::getInstance()->autoRender(false);
    }
}

Weiterleitung und Rendering manuell steuern

<?php
// application/controllers/Product.php
class ProductController extends Yaf_Controller_Abstract
{
    public function showAction(): void
    {
        $id = (int) $this->getRequest()->getParam('id', 0);

        if ($id <= 0) {
            // Weiterleitung zu einer anderen Action innerhalb desselben Controllers
            $this->forward('error', ['message' => 'Ungültige Produkt-ID']);
            return;
        }

        // Produkt laden (vereinfacht)
        $product = ['id' => $id, 'name' => 'Beispielprodukt', 'price' => 9.99];

        // View-Variable setzen
        $this->getView()->assign('product', $product);

        // View explizit rendern und Ergebnis in Variable speichern
        $html = $this->render('show');
        // HTML-Ausgabe anpassen oder cachen
        echo '<!-- Cached -->' . $html;
    }

    public function errorAction(): void
    {
        $message = $this->getRequest()->getParam('message', 'Unbekannter Fehler');
        $this->getView()->assign('error', $message);
    }
}

// Wichtig · Fallstricke

Sicherheitshinweis: Benutzereingaben, die über getRequest()->getParam() abgerufen werden, müssen vor der Ausgabe stets mit htmlspecialchars() oder anderen geeigneten Escape-Funktionen bereinigt werden, um XSS-Angriffe zu verhindern.

Action-Namenskonvention: Yaf erwartet, dass Action-Methoden nach dem Muster <actionName>Action() benannt werden (z. B. indexAction(), showAction()). Wird die Konvention nicht eingehalten, löst Yaf eine Exception aus.

Automatisches Rendering: Gibt eine Action-Methode true zurück (oder keinen Wert), rendert Yaf automatisch die passende View-Datei. Gibt sie false zurück oder wird Yaf_Dispatcher::getInstance()->autoRender(false) aufgerufen, unterbleibt das automatische Rendering.

Klassen-Eigenschaften: Die Klasse stellt die geschützten Eigenschaften $_name (Controller-Name), $_request (Yaf_Request_Abstract), $_response (Yaf_Response_Abstract), $_view (Yaf_View_Interface) und $_invoke_args bereit, auf die in Unterklassen zugegriffen werden kann.