Start · Sprachen · PHP · Referenz · Yaf_Request_Abstract

Yaf_Request_Abstract

Klasse

Abstrakte Basisklasse für Anfrageobjekte im Yaf-Framework, die HTTP-Request-Daten kapselt und den Zugriff auf Parameter, Methoden und Routing-Informationen bereitstellt.

seit PHP 2.0.0 Kategorie: misc

Signatur

abstract class Yaf_Request_Abstract

Beschreibung

Yaf_Request_Abstract ist die abstrakte Basisklasse aller Anfrageobjekte im Yet Another Framework (Yaf). Sie kapselt alle Informationen einer eingehenden HTTP-Anfrage – darunter GET-, POST- und Routing-Parameter sowie Informationen über die verwendete HTTP-Methode. Konkrete Implementierungen wie Yaf_Request_Http und Yaf_Request_Simple erweitern diese Klasse.

Die Klasse stellt Methoden zur Verfügung, um auf den aktuellen Module-, Controller- und Action-Namen zuzugreifen, die vom Router gesetzt wurden. Zusätzlich können beliebige benutzerdefinierte Parameter über setParam() und getParam() am Anfrageobjekt gespeichert und ausgelesen werden.

Im typischen Yaf-Workflow wird eine Instanz dieser Klasse vom Dispatcher erstellt und automatisch an Controller-Aktionen weitergereicht, sodass Entwickler direkt auf alle relevanten Request-Daten zugreifen können. Eine direkte Instanziierung von Yaf_Request_Abstract ist nicht möglich, da es sich um eine abstrakte Klasse handelt.

  • Routing-Informationen: Modul, Controller und Action werden nach dem Routing im Objekt gespeichert.
  • Parameter-Zugriff: GET-, POST- und selbst definierte Parameter sind über einheitliche Methoden abrufbar.
  • Request-Typ-Erkennung: Methoden wie isGet(), isPost(), isCli() helfen bei der Unterscheidung des Request-Typs.

Beispiele

Zugriff auf Request-Daten in einer Yaf-Controller-Action

<?php
class IndexController extends Yaf_Controller_Abstract
{
    public function indexAction()
    {
        // Das Request-Objekt ist eine Instanz von Yaf_Request_Abstract
        $request = $this->getRequest();

        // HTTP-Methode prüfen
        if ($request->isPost()) {
            $name = $request->getPost('name', 'Gast');
            echo 'POST-Parameter name: ' . htmlspecialchars($name);
        } elseif ($request->isGet()) {
            $id = $request->getQuery('id', 0);
            echo 'GET-Parameter id: ' . (int)$id;
        }

        // Routing-Informationen ausgeben
        echo 'Modul: '     . $request->getModuleName()     . PHP_EOL;
        echo 'Controller: ' . $request->getControllerName() . PHP_EOL;
        echo 'Action: '    . $request->getActionName()     . PHP_EOL;
    }
}
GET-Parameter id: 42 Modul: Index Controller: Index Action: index

Benutzerdefinierte Parameter am Request-Objekt setzen und auslesen

<?php
class BootstrapController extends Yaf_Controller_Abstract
{
    public function indexAction()
    {
        $request = $this->getRequest();

        // Eigenen Parameter setzen (z. B. aus einem Plugin heraus)
        $request->setParam('userId', 99);
        $request->setParam('role', 'admin');

        // Parameter wieder auslesen
        $userId = $request->getParam('userId');
        $role   = $request->getParam('role');

        echo 'User-ID: ' . $userId . PHP_EOL;
        echo 'Rolle: '   . $role   . PHP_EOL;

        // Nicht gesetzter Parameter mit Standardwert
        $lang = $request->getParam('language', 'de');
        echo 'Sprache: ' . $lang . PHP_EOL;
    }
}
User-ID: 99 Rolle: admin Sprache: de

// Wichtig · Fallstricke

Sicherheitshinweis: Alle aus dem Request ausgelesenen Daten (GET, POST, Routing-Parameter) sind als nicht vertrauenswürdig zu behandeln. Ausgaben müssen stets mit htmlspecialchars() oder ähnlichen Funktionen gesichert werden, um XSS-Angriffe zu verhindern. Datenbankabfragen müssen mit Prepared Statements oder Escaping geschützt werden.

Yaf_Request_Abstract ist als abstrakte Klasse nicht direkt instanziierbar. Verwende stattdessen Yaf_Request_Http für HTTP-Anfragen oder Yaf_Request_Simple für Unit-Tests und CLI-Szenarien.

Die Klasse gehört zur Yaf-Extension, die als PECL-Paket installiert werden muss (pecl install yaf). Sie ist nicht im PHP-Kern enthalten und steht somit nur zur Verfügung, wenn die Extension aktiviert ist.