Signatur
Beschreibung
Yaf_Action_Abstract ist die Basisklasse für alle Action-Klassen im Yet Another Framework (Yaf). Yaf ist ein in C geschriebenes PHP-Framework, das als PECL-Extension verfügbar ist und auf maximale Performance ausgelegt ist. Action-Klassen stellen eigenständige Einstiegspunkte dar, die alternativ zu Methoden innerhalb eines Controllers verwendet werden können.
Eine konkrete Action-Klasse muss von Yaf_Action_Abstract erben und die abstrakte Methode execute() implementieren. Diese Methode wird vom Yaf-Dispatcher automatisch aufgerufen, wenn die entsprechende Route auf die Action verweist. Dadurch lässt sich jede Action in eine eigene Datei auslagern, was die Übersichtlichkeit und Wartbarkeit bei großen Projekten verbessert.
Über die geerbten Methoden hat die Action Zugriff auf das Yaf_Request_Abstract-Objekt (via getRequest()), das Yaf_Response_Abstract-Objekt (via getResponse()), den Yaf_Controller_Abstract (via getController()) sowie auf Parameter der Route. Damit steht der vollständige Request-Kontext zur Verfügung.
Der Einsatz von Yaf_Action_Abstract empfiehlt sich besonders dann, wenn einzelne Actions sehr umfangreich werden oder wenn die Wiederverwendbarkeit einzelner Aktionen im Vordergrund steht. In kleineren Projekten können Actions auch direkt als Methoden im Controller definiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $request Pflicht | Yaf_Request_Abstract | Das aktuelle Request-Objekt, das vom Yaf-Dispatcher an die Action übergeben wird. Kann über getRequest() abgerufen werden. |
|
| $response Pflicht | Yaf_Response_Abstract | Das aktuelle Response-Objekt, das vom Yaf-Dispatcher an die Action übergeben wird. Kann über getResponse() abgerufen werden. |
|
| $view Pflicht | Yaf_View_Interface | Die View-Instanz, die vom Yaf-Dispatcher an die Action übergeben wird. | |
| $invokeArgs | array | [] | Optionale zusätzliche Argumente, die beim Aufruf der Action übergeben werden können. |
Beispiele
Einfache Action-Klasse mit execute()-Methode
<?php
// Datei: application/controllers/actions/IndexAction.php
class IndexAction extends Yaf_Action_Abstract
{
public function execute()
{
// Zugriff auf Request-Parameter
$request = $this->getRequest();
$name = $request->getParam('name', 'Welt');
// Daten an den View übergeben
$this->getView()->assign('name', $name);
// Die View wird automatisch gerendert
}
}
Action mit Zugriff auf den übergeordneten Controller
<?php
// Datei: application/controllers/actions/DetailAction.php
class DetailAction extends Yaf_Action_Abstract
{
public function execute()
{
// Übergeordneten Controller abrufen
$controller = $this->getController();
// Request-Objekt auslesen
$request = $this->getRequest();
$id = (int) $request->getParam('id', 0);
if ($id <= 0) {
// Weiterleitung bei ungültiger ID
$this->getResponse()->setRedirect('/error/invalid');
return;
}
// Daten laden und an View übergeben
$data = ['id' => $id, 'title' => 'Eintrag ' . $id];
$this->getView()->assign('item', $data);
}
}
Controller, der auf externe Action-Klassen verweist
<?php
// Datei: application/controllers/ArticleController.php
class ArticleController extends Yaf_Controller_Abstract
{
// Statt einer index()-Methode wird eine externe Action-Klasse verwendet.
// Yaf sucht automatisch nach IndexAction in:
// application/controllers/actions/IndexAction.php
public $actions = [
'index' => 'actions/IndexAction.php',
'detail' => 'actions/DetailAction.php',
];
}
// Wichtig · Fallstricke
Abstrakte Methode: Jede konkrete Unterklasse muss die Methode execute() implementieren, andernfalls wirft PHP einen Fatal Error.
Yaf als Extension: Yaf ist kein Composer-Paket, sondern eine PECL-Extension, die separat installiert und in der php.ini aktiviert werden muss (extension=yaf.so). Ohne diese Extension stehen alle Yaf_*-Klassen nicht zur Verfügung.
Action vs. Controller-Methode: Die Auslagerung in externe Action-Klassen ist optional. Wenn der Controller das öffentliche Array-Attribut $actions definiert und dort Dateinamen zuordnet, lädt Yaf die entsprechenden Action-Klassen automatisch. Ist $actions nicht definiert, sucht Yaf nach gleichnamigen Methoden im Controller.
Sicherheit: Eingaben aus getParam() sind stets zu validieren und zu filtern, da sie direkt aus dem HTTP-Request stammen.