echo $begrüßung;
Ich finde irgendwie nicht wirklich heraus, wie die einzelnen Klassen/Instanzen wissen, wo sie das RequestObjekt abholen. Beim Front-Controller, holen sie es sich da, oder bekommen sie es übergeben?
Sie bekommen es immer durchgereicht. Die Haupt-Methode von Zend_Controller_Front ist dispatch(). Dort wird das Request-Objekt erzeugt, wenn keins übergeben wurde, was der Normalfall ist. Mittels setRequest() landet es in $this->_request. Analoges passiert mit dem Response-Objekt. (Plugin-Handling lass ich mal aus.) Der Router wird instantiiert, anschließend der Dispatcher, wobei ihm das Resp-O übergeben wird. Vom Router wird route() aufgerufen und das Req-O übergeben. Der ermittelt Modul, Controller und Action und hinterlegt diese Werte im Req-O. Vom Dispatcher wird nun dispatch() aufgerufen und dabei sowohl das Req-O als auch das Resp-O übergeben[1]. Dort wird der passende Action-Controller ermittelt und instantiiert, wobei wiederum Req-O und Resp-O übergeben werden. Vom AC wird dispatch() aufgerufen mit dem Action-Namen als Parameter. Die darin aufgerufene Action-Methode kann nun auf die beim Instantiieren des AC übergebenen Resp-O und Req-O zugreifen.
Im Grunde ja einfach mal im Code schauen, aber so versiert bin ich da (noch ?) nicht.
Genau das musste ich auch machen, da meine aktive Zeit mit dem ZF bereits vor dem Erscheinen der Version 1 endete.
[1] Dieser Aufruf steckt genauer gesagt in der Dispatch-Schleife, die dafür sorgt, dass mehrere Actions aufgerufen werden können. Die Übergabe des Resp-O kurz nach der Instantiierung des Dispatchers mit setResponse() scheint mir ein Überbleibsel aus einer älteren Funktionalität zu sein. Da passiert nichts weiter außer dass der Dispatcher es in seinem $this->response ablegt. Mehr ist da augenscheinlich auch nicht geplant, denn es ist nur eine Accessor-Funktion. Nun passiert Plugin- und Route-Handling wobei der Dispatcher nicht involviert ist. Die Plugins können mit ihrer Referenz auf das Resp-O selbiges beeinflussen, was sich natürlich auch in $this->_response und $dispatcher->_response niederschlägt, da das auch nur Referenzen darauf sind. Nun erfolgt $dispatcher->dispatch() und da wird wieder die Referenz auf das Resp-O übergeben ...
Da unter PHP5 ja Objekte generell als Referenz übergeben werden, reichte es, wenn sowohl Req-O als auch Resp-O einmalig beim Instantiieren der jeweiligen Beteiligten übergeben werden und nicht bei jedem Aufruf einer Methode eines Beteiligten neu vom FrontController übergeben wird. Mir will keine Begründung einfallen, warum das da doppelt gemoppelt ist, außer dass man es später wegoptimieren und für Release X eine Geschwindigkeitssteigerung proklamieren kann :-)
echo "$verabschiedung $name";