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
(wie 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 Frameworks 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.