Action HelferEinführung
Aktion Helfer erlauben Entwicklern Runtime und/oder On-Demand Funktionalität in jeden
Aktion Controller zu inizieren der Zend_Controller_Action
erweitert. Aktion Controller versuchen den Notwendigkeit zu minimieren, den abstrakten
Aktion Controller zu erweitern um damit normale Aktion Controller Funktionen inizieren.
Es gibt eine Menge an Wegen um Aktion Helfer zu verwenden. Aktion Helfer verwenden ein
Broker System, ähnlich den Typen von Brokern in Zend_View_Helper, und denen von Zend_Controller_Plugin. Aktion Helfer
Zend_View_Helper) können bei Bedarf geladen und aufgerufen
werden, oder Sie können wärend der Anfragezeit (Bootstrap) instanziert werden oder
wären der Erstellungszeit des Aktion Controllers (init()). Um
Sie näher zu verstehen, betrachten wir Ihre Verwendung in der folgenden Sektion.
Helfer Initialisierung
Ein Helfer kann auf vielen verschiedenen Wegen initialisiert werden, basierend auf den
eigenen Bedürfnissen und den Funktionalitäten dieses Helfers.
Ein Helfer Broker wir das der $_helper Teilnehmer von
Zend_Controller_Action gespeichert; der Broker kann verwendet
werden um Helfer zu empfangen oder aufzurufen. Einige Methoden das zu tun sind:
Explizit getHelper() verwenden. Ihm einfach einen
Namen übergeben und ein Helfer Objekt wird zurückgegeben:
_helper->getHelper('FlashMessenger');
$flashMessenger->addMessage('Wir haben in der letzten Anfrage etwas getan');
]]>
Verwenden der __get() Funktionalität des Helfer
Brokers und Empfangen des Helfers wie wenn er eine Teilnehmer Eigenschaft des
Brokers wäre:
_helper->FlashMessenger;
$flashMessenger->addMessage('Wir haben in der letzten Anfrage etwas getan');
]]>
Letztendlich implmentieren die meisten Aktion Helfer die
direct() Methode welche eine spezielle,
Standardmethode im Helfer aufruft. In Beispiel des
FlashMessenger's, wird
addMessage() aufgerufen:
_helper->FlashMessenger('Wir haben in der letzten Anfrage etwas getan');
]]>Alle oben angeführten Beispiel sind funktionell gleichwertig.
Man kann Helfer auch explizit instanzieren. Das kann gewollt sein wenn der Helfer
ausserhalb eines Aktion Controllers verwendet werden soll, oder wenn ein Helfer an einen
Helfer Broker übergeben wird um Ihn durch irgendeine Aktion zu verwenden. Instanziert
wird er wie jede andere PHP Klasse.
Der Helfer BrokerZend_Controller_Action_HelperBroker behandelt die Details der
Registrierung von Helfer Objekten und Helfer Pfaden, sowie dem Empfangen von Helfern bei
Befarf.
Um einen Helfer im Browser zu registrieren, kann addHelper()
verwendet werden:
Natürlich ist das Instanzieren und übergeben von Helfern an den Broker etwas Zeit- und
Ressourcen intensiv, weswegen twei Methoden existieren um die Dinge etwas zu
automatisieren: addPrefix() und
addPath().
addPrefix() nimmt einen Klassenpräfix und verwendet
Ihn um einen Pfad zu ermitteln wo Helferklassen definiert wurden. Er nimmt an
das der Präfix den Konventionen der Benamung von Klassen im Zend Framework
folgt.
addPath() nimmt ein Verzeichnis als erstes Argument
und einen Klassenprefix als zweites Argument (Standardwert ist
'Zend_Controller_Action_Helper'). Das erlaubt es die
eigenen Klassenpräfixes mit speziellen Verzeichnissen zu verbinden.
Da diese Methoden statisch sind, können Sie zu jeder Zeit in der Controllerkette
aufgerufen werden um Helfer dynamisch hinzuzufügen wenn es notwendig wird.
Intern verwendet der Helfer Broker eine
Instanz des PluginLoader's um die Pfade zu verwalten. Man erhlt den PluginLoader
indem die statische Methode getPluginLoader() verwendet, oder
alternativ, eine eigene PluginLoader Instanz einfügt durch Verwenden von
setPluginLoader().
Um zu ermitteln ob ein Helfer im Helfer Broker existiert, kann
hasHelper($name) verwendet werden, wobei
$name der Kurzname des Helfers ist (ohne das Präfix):
Es gibt auch zwei statische Methoden für das bekommen von Helfern vom Helferbroker:
getExistingHelper() und
getStaticHelper().
getExistingHelper() empfängt einen Helfer nur dann wenn er
davor durch den Helferbroker ausgerufen wirde oder explizit in Ihm registriert wurde;
wenn nicht wird eine Ausnahme geworfen. getStaticHelper()
macht das selbe wie getExistingHelper(), wird aber versuchen
den Helfer zu initiieren wenn dieser davor noch nicht im Helferstack registriert wurde.
getStaticHelper() ist eine gute Wahl für das empfangen von
Helfern welche man konfigurieren will.
Beide Methoden nehmen ein einzelnes Argument, $name, welches der
Kurzname des Helfers (ohne den Präfix) ist.
Schlußendlich, um einen registrierten Helfer vom Broker zu entfernen, kann
removeHelper($name) verwendet werden, wobei
$name der Kurzname des Helfers ist (ohne den Prefix):
Eingebaute Aktions Helfer
Zend Framework enthält standardmäßig verschiedene Action Helfer:
AutoComplete für automatisierte Antworten für
AJAX Autovervollständigung; ContextSwitch und
AjaxContext für alternative Antwort Formate eigener Aktionen;
einen FlashMessenger für die Behandlung von Kurznachrichten;
Json für das verschlüsseln und senden von JSON
Antworten; einen Redirector, um verschiedene Implementationen, für
das Umleiten zu internen und externen Seiten, für die Anwendung bereitzustellen und
einen ViewRenderer um den Prozess des Setzens eines View Objekts
im Controller und dem Rendern von Views zu automatisieren.
Schreiben eigener Helfer
Aktions Helfer erweitern Zend_Controller_Action_Helper_Abstract,
eine abstrakte Klasse die das Basisinterface bietet und vom Helfer Broker funktionell
benötigt wird. Diese inkludiert die folgenden Methoden:
setActionController() wird verwendet um den aktuellen
Aktion Controller zu setzen.
init(), wird vom Helfer Broker wärend der
Instanzierung ausgeführt und kann verwendet werden um den Status zurückzusetzen
wenn mehrere Controller den gleichen Helfer in einer verketteten Aktion
verwenden.
preDispatch(), wird vor der ausführenden Aktion
gestartet.
postDispatch() wird ausgeführt nachdem eine Aktion
fertig ist -- selbst wenn ein preDispatch() Plugin die
Aktion abgebrochen hat. Normalerweise nützlich für das Saubermachen.
getRequest() empfängt das aktuelle Anfrage Objekt.
getResponse() empfängt das aktuelle Antwort Objekt.
getName() empfängt den Helfernamen. Sie empfängt die
Portion des Klassennamens der dem letzten Unterstrich-Zeichen folgt, oder
andererseits den kompletten Klassennamen. Als Beispiel, wenn die Klasse
Zend_Controller_Action_Helper_Redirector heißt, wird
Redirector zurückgegeben; eine Klasse die
FooMessage heißt wird einfach sich selbst zurückgeben.
Optional kann eine direct() Methode in der eigenen Helfer
Klasse inkludiert werden. Wenn Sie definiert ist, erlaubt Sie den Helfer als eine
Methode des Helfer Brokers zu verwenden, um eine einfache rein-raus Verwendung des
Helfers zu ermöglichen. Als Beispiel definiert der Umleiter
direct() als einen Alias von goto()
und erlaubt damit die Verwendung des Helfers wie folgt:
_helper->redirector('item', 'view', 'blog', array('id' => 42));
]]>
Intern schaut die __call() Methode des Helfer Brokers nach
einem Helfer der redirector heißt, prüft anschließend ob der
Helfer eine definierte direct() Methode besitzt und ruft diese
mit den angegebenen Argumenten auf.
Wenn eine eigene Helfer Klasse erstellt wurde, kann man zu Ihr wie im obigen Kapitel
beschrieben, Zugang erhalten.