Signatur
Beschreibung
Yaf_Response_Abstract ist die abstrakte Basisklasse für alle Antwortobjekte innerhalb des Yet Another Framework (Yaf). Sie stellt die gemeinsame Schnittstelle und Grundfunktionalität für HTTP-Antworten bereit, wie das Verwalten von Antwortheadern, Statuscodes und dem Antwortkörper.
Konkrete Implementierungen wie Yaf_Response_Http (für Web-Anfragen) und Yaf_Response_Cli (für Kommandozeilen-Anwendungen) erweitern diese abstrakte Klasse. Im normalen Anwendungsablauf wird das Antwortobjekt automatisch durch den Yaf_Application-Dispatcher erzeugt und verwaltet – ein manuelles Erstellen ist selten notwendig.
Typische Anwendungsfälle sind das Setzen von HTTP-Headern, das Anhängen von Ausgabeinhalten an den Antwortkörper sowie das manuelle Ausgeben oder Zurückgeben der Antwort an den Client. Über die Methoden der Klasse lässt sich der gesamte Antwortzyklus präzise steuern.
- Header verwalten: Methoden wie
setHeader()undgetHeader()ermöglichen das Setzen und Lesen von HTTP-Headern. - Body verwalten: Mit
setBody(),appendBody()undgetBody()wird der Antwortkörper gesteuert. - Ausgabe:
response()sendet die vollständige Antwort an den Client.
Beispiele
Antwortobjekt im Controller verwenden
<?php
class IndexController extends Yaf_Controller_Abstract
{
public function indexAction()
{
// Antwortobjekt aus dem Dispatcher holen
$response = $this->getResponse();
// HTTP-Header setzen
$response->setHeader('Content-Type', 'application/json');
// Antwortkörper setzen
$data = json_encode(['status' => 'ok', 'message' => 'Hallo Welt']);
$response->setBody($data);
// Automatisches Rendering deaktivieren
$this->getView()->setScriptPath(null);
return true;
}
}
Body schrittweise aufbauen und ausgeben
<?php
class ApiController extends Yaf_Controller_Abstract
{
public function listAction()
{
$response = $this->getResponse();
// Bestehenden Body leeren
$response->clearBody();
// Inhalt schrittweise anhängen
$response->appendBody('<ul>');
foreach (['Eintrag A', 'Eintrag B', 'Eintrag C'] as $item) {
$response->appendBody('<li>' . htmlspecialchars($item) . '</li>');
}
$response->appendBody('</ul>');
// Aktuellen Inhalt des Body ausgeben
echo $response->getBody();
return false; // Kein weiteres Rendering
}
}
// Wichtig · Fallstricke
Abstrakte Klasse: Yaf_Response_Abstract kann nicht direkt instanziiert werden. Verwende stets die konkreten Unterklassen Yaf_Response_Http oder Yaf_Response_Cli bzw. erhalte das Antwortobjekt über Yaf_Dispatcher::getInstance()->getResponse() oder $this->getResponse() im Controller.
Yaf-Extension erforderlich: Die gesamte Yaf-Klassenhierarchie steht nur zur Verfügung, wenn die PHP-Erweiterung yaf installiert und in der php.ini aktiviert ist (extension=yaf.so).
Sicherheit: Beim manuellen Setzen von Header-Werten oder Body-Inhalten sollten Ausgaben stets mit htmlspecialchars() oder entsprechenden Funktionen bereinigt werden, um XSS-Angriffe zu vermeiden.