Das Request-ObjektEinführungDas Request-Objekt ist eine einfaches Werteobjekt, das zwischen Zend_Controller_Front und den Router, Dispatcher und Controller Klassen übergeben wird. Es enthält sowohl die Definition des Controllers, der Aktion und der Parameter, die an die Aktion übergeben werden sollen, als auch den Rest der Anfrageumgebung, sei es HTTP, CLI oder PHP-GTK.
Abhängig vom Typ der Anfrage können auch weitere Methoden verfügbar sein. Das verwendete Standard-Request-Objekt Zend_Controller_Request_Http stellt z.B. Methoden zum Abfragen der Request-URI, Pfadinformationen, den Parametern $_GET und $_POST usw. bereit. Das Request-Objekt wird an den FrontController übergeben oder, wenn keines bereit gestellt wurde, am Anfang des Dispatcher-Prozesses instanziert, bevor das Routing beginnt. Es wird an jedes Objekt in der Dispatcherkette übergeben. Zusätzlich ist das Request-Objekt besonders beim Testen sehr nützlich. Der Entwickler kann die Anfrageumgebung von Hand erstellen, inklusive Controller, Aktion, Parameter, URI usw. und das Request-Objekt an den Front Controller übergeben, um den Ablauf der Applikation zu testen. Zusammen mit dem Response-Objekt sind durchdachte und genaue UnitTests für eine MVC-Applikation möglich. HTTP-AnfragenAuf Request-Daten zugreifenZend_Controller_Request_Http kapselt den Zugriff auf relevante Werte wie Schlüsselname und Wert für Controller und Action, Variablen des Routers und alle zusätzlichen Parameter, die aus der URI ermittelt wurden. Es erlaubt zusätzlich den Zugriff auf superglobale Werte als öffentliche Eigenschaften und verwaltet die aktuelle Basis-URL und Request-URI. Superglobale Werte können in einem Request-Objekt nicht gesetzt werden, stattdessen verwendet man die Methoden setParam() und getParam() um Benutzerparameter zu setzen oder zu erhalten.
Auf spezifische superglobale Werte kann alternativ über eine öffentliche Methode zugegriffen werden. Zum Beispiel kann auf den unverarbeiteten Wert von $_POST['user'] durch Aufruf der Methode getPost('user') des Request-Objekts zugegriffen werden. Diese beinhalten getQuery(), um $_GET-Elemente zu erhalten und getHeader(), um Request-Header zu erhalten.
Im Anfrageobjekt können auch Benutzerparameter durch Verwendung von setParam() gesetzt werden und später durch verwenden von getParam() zurückgegeben werden. Der Router verwendet diese Funktionalität, um passende Parameter in der Anfrage-URI im Anfrageobjekt zu setzen.
Basis-Url und UnterverzeichnisseZend_Controller_Request_Http erlaubt, dass Zend_Controller_Router_Rewrite in einem Unterverzeichnis verwendet werden kann. Zend_Controller_Request_Http versucht, die Basis-URL automatisch zu erkennen und entsprechend zu setzen. Wenn man zum Beispiel seine index.php in einem Webserverunterverzeichnis mit Namen /projects/myapp/index.php verwendet, sollte die Basis-URL (die Rewrite-Basis) auf /projects/myapp gesetzt werden. Dieser String wird dann vom Anfang des Pfades entfernt, bevor irgendwelche Routingtreffer ermittelt werden. Dies befreit einen davon, es am Anfang jeder Route setzen zu müssen. Eine Route 'user/:username' passt auf URIs wie http://localhost/projects/myapp/user/martel und http://example.com/user/martel.
Sollte die Basis-URL falsch erkannt werden, kann man diese auch mit einem eigenen Pfad mit Hilfe der Methode setBaseUrl() der Klasse Zend_Controller_Request_Http oder der Klasse Zend_Controller_Front überschreiben. Die einfachste Methode ist die von Zend_Controller_Front, welche es an das Request-Objekt weiterleitet. Nun Beispiel, um eine eigene Basis-URL zu setzen:
Erkennen der AnfragemethodegetMethod() erlaubt es die HTTP-Anfragemethode zu erkennen, die verwendet wurde, um die aktuelle Ressource anzufragen. Zusätzlich existiert eine Vielzahl von Methoden, die es erlauben, boolsche Antworten zu erhalten, wenn gefragt wird, ob ein spezieller Typ von Anfrage durchgeführt wurde:
Der grundsätzliche Verwendungszweck hierfür ist die Erstellung von RESTvollen MVC-Architekturen. Erkennen von AJAX-AnfragenZend_Controller_Request_Http hat eine rudimentäre Methode für die Erkennung von AJAX-Anfragen: isXmlHttpRequest(). Diese Methode sucht nach einem HTTP-Anfrageheader X-Requested-With mit dem Wert 'XMLHttpRequest'; wenn er gefunden wird, gibt er TRUE zurück. Aktuell wird dieser Header standardmäßig mit den folgenden JS-Bibliotheken geschickt:
Die meisten AJAX-Bibliotheken erlauben das Senden von eigenen HTTP-Anfrageheadern; wenn die eigene Bibliothek diesen Header nicht sendet, muß dieser einfach zum Anfrageheader hinzugefügt werden um sicherzustellen, dass die Methode isXmlHttpRequest() funktioniert. Vererben des AnfrageobjektsDie Basisanfrageklasse, die für alle Anfrageobjekte verwendet wird, ist die abstrakte Klasse Zend_Controller_Request_Abstract. Sie ist sehr grundsätzlich und definiert die folgenden Methoden:
Das Anfrageobjekt ist ein Behälter für die Anfrageumgebung. Die Controller-Kette muß wirklich nur wissen, wie der Controller, die Aktion, die optionalen Parameter und der Dispatched-Status gesetzt und empfangen werden können. Standardmäßig durchsucht das Anfrageobjekt die eigenen Parameter, indem es die Schlüssel für Controller oder Aktion verwendet um den Controller und die Aktion zu ermitteln. Erweiteren Sie diese Klasse oder eine ihrer Derivate, wenn die Anfrageklasse mit einer speziellen Umgebung interagieren soll, um Daten für die obigen Aufgaben zu erhalten. Beispiele beinhalten die HTTP-Umgebung, eine CLI-Umgebung, oder eine PHP-GTK-Umgebung.
|
|