Action HelferEinführung
Aktion Helfer erlauben Entwicklern Runtime und/oder On-Demand Funktionalität in jeden
Aktion Kontroller zu inizieren der Zend_Controller_Action
erweitert. Aktion Kontroller versuchen den Notwendigkeit zu minimieren, den abstrakten
Aktion Kontroller zu erweitern um damit normale Aktion Kontroller 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 Kontrollers (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 FlashMessengers, 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 Kontrollers 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 Klassenprefix und verwendet Ihn um einen
Pfad zu ermitteln wo Helferklassen definiert wurden. Er nimmt an das der Prefix
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 Klassenprefixes mit
speziellen Verzeichnissen zu verbinden.
Da diese Methoden statisch sind, können Sie zu jeder Zeit in der Kontrollerkette
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 Prefix):
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 Kontroller
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
Kontroller zu setzen.
init(), wird vom Helfer Broker wärend der Instanzierung ausgeführt
und kann verwendet werden um den Status zu resetieren wenn mehrere Kontroller
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 Klasse 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.