File: Zend_Controller-ActionHelpers.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (341 lines) | stat: -rw-r--r-- 15,826 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.controller.actionhelpers" xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>Action Helfer</title>

    <sect2 id="zend.controller.actionhelper.introduction">
        <title>Einführung</title>

        <para>
            Aktion Helfer erlauben Entwicklern Runtime und/oder On-Demand Funktionalität in jeden
            Aktion Controller zu inizieren der <classname>Zend_Controller_Action</classname>
            erweitert. Aktion Controller versuchen den Notwendigkeit zu minimieren, den abstrakten
            Aktion Controller zu erweitern um damit normale Aktion Controller Funktionen inizieren.
        </para>

        <para>
            Es gibt eine Menge an Wegen um Aktion Helfer zu verwenden. Aktion Helfer verwenden ein
            Broker System, ähnlich den Typen von Brokern in <link
                linkend="zend.view.helpers">Zend_View_Helper</link>, und denen von <link
                linkend="zend.controller.plugins">Zend_Controller_Plugin</link>. Aktion Helfer
            <classname>Zend_View_Helper</classname>) 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 (<methodname>init()</methodname>). Um
            Sie näher zu verstehen, betrachten wir Ihre Verwendung in der folgenden Sektion.
        </para>
    </sect2>

    <sect2 id="zend.controller.actionhelper.initialization">
        <title>Helfer Initialisierung</title>

        <para>
            Ein Helfer kann auf vielen verschiedenen Wegen initialisiert werden, basierend auf den
            eigenen Bedürfnissen und den Funktionalitäten dieses Helfers.
        </para>

        <para>
            Ein Helfer Broker wir das der <varname>$_helper</varname> Teilnehmer von
            <classname>Zend_Controller_Action</classname> gespeichert; der Broker kann verwendet
            werden um Helfer zu empfangen oder aufzurufen. Einige Methoden das zu tun sind:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Explizit <methodname>getHelper()</methodname> verwenden. Ihm einfach einen
                    Namen übergeben und ein Helfer Objekt wird zurückgegeben:
                </para>

                <programlisting language="php"><![CDATA[
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
$flashMessenger->addMessage('Wir haben in der letzten Anfrage etwas getan');
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Verwenden der <methodname>__get()</methodname> Funktionalität des Helfer
                    Brokers und Empfangen des Helfers wie wenn er eine Teilnehmer Eigenschaft des
                    Brokers wäre:
                </para>

                <programlisting language="php"><![CDATA[
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->addMessage('Wir haben in der letzten Anfrage etwas getan');
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Letztendlich implmentieren die meisten Aktion Helfer die
                    <methodname>direct()</methodname> Methode welche eine spezielle,
                    Standardmethode im Helfer aufruft. In Beispiel des
                    <emphasis>FlashMessenger</emphasis>'s, wird
                    <methodname>addMessage()</methodname> aufgerufen:
                </para>

                <programlisting language="php"><![CDATA[
$this->_helper->FlashMessenger('Wir haben in der letzten Anfrage etwas getan');
]]></programlisting>
            </listitem>
        </itemizedlist>

        <note>
            <para>Alle oben angeführten Beispiel sind funktionell gleichwertig.</para>
        </note>

        <para>
            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 <acronym>PHP</acronym> Klasse.
        </para>
    </sect2>

    <sect2 id="zend.controller.actionhelper.broker">
        <title>Der Helfer Broker</title>

        <para>
            <classname>Zend_Controller_Action_HelperBroker</classname> behandelt die Details der
            Registrierung von Helfer Objekten und Helfer Pfaden, sowie dem Empfangen von Helfern bei
            Befarf.
        </para>

        <para>
            Um einen Helfer im Browser zu registrieren, kann <methodname>addHelper()</methodname>
            verwendet werden:
        </para>

        <programlisting language="php"><![CDATA[
Zend_Controller_Action_HelperBroker::addHelper($helper);
]]></programlisting>

        <para>
            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: <methodname>addPrefix()</methodname> und
            <methodname>addPath()</methodname>.
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>addPrefix()</methodname> 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.
                </para>

                <programlisting language="php"><![CDATA[
// Helfer mit vorangestelltem My_Action_Helpers in My/Action/Helpers/ hinzufügen
Zend_Controller_Action_HelperBroker::addPrefix('My_Action_Helpers');
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    <methodname>addPath()</methodname> nimmt ein Verzeichnis als erstes Argument
                    und einen Klassenprefix als zweites Argument (Standardwert ist
                    '<classname>Zend_Controller_Action_Helper</classname>'). Das erlaubt es die
                    eigenen Klassenpräfixes mit speziellen Verzeichnissen zu verbinden.
                </para>

                <programlisting language="php"><![CDATA[
// Helfer mit vorangestelltem Helper in Plugins/Helpers/ hinzufügen
Zend_Controller_Action_HelperBroker::addPath('./Plugins/Helpers',
                                             'Helper');
]]></programlisting>
            </listitem>
        </itemizedlist>

        <para>
            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.
        </para>

        <para>
            Intern verwendet der Helfer Broker <link linkend="zend.loader.pluginloader">eine
            Instanz des PluginLoader's</link> um die Pfade zu verwalten. Man erhlt den PluginLoader
            indem die statische Methode <methodname>getPluginLoader()</methodname> verwendet, oder
            alternativ, eine eigene PluginLoader Instanz einfügt durch Verwenden von
            <methodname>setPluginLoader()</methodname>.
        </para>

        <para>
            Um zu ermitteln ob ein Helfer im Helfer Broker existiert, kann
            <methodname>hasHelper($name)</methodname> verwendet werden, wobei
            <varname>$name</varname> der Kurzname des Helfers ist (ohne das Präfix):
        </para>

        <programlisting language="php"><![CDATA[
// Prüft ob der 'redirector' Helfer im Broker registriert ist:
if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {
    echo 'Der Redirector Helfer ist registriert';
}
]]></programlisting>

        <para>
            Es gibt auch zwei statische Methoden für das bekommen von Helfern vom Helferbroker:
            <methodname>getExistingHelper()</methodname> und
            <methodname>getStaticHelper()</methodname>.
            <methodname>getExistingHelper()</methodname> 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. <methodname>getStaticHelper()</methodname>
            macht das selbe wie <methodname>getExistingHelper()</methodname>, wird aber versuchen
            den Helfer zu initiieren wenn dieser davor noch nicht im Helferstack registriert wurde.
            <methodname>getStaticHelper()</methodname> ist eine gute Wahl für das empfangen von
            Helfern welche man konfigurieren will.
        </para>

        <para>
            Beide Methoden nehmen ein einzelnes Argument, <varname>$name</varname>, welches der
            Kurzname des Helfers (ohne den Präfix) ist.
        </para>

        <programlisting language="php"><![CDATA[
// Prüfe ob der 'redirector' Helfer im Broker registriert ist und holt Ihn:
if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {
    $redirector =
        Zend_Controller_Action_HelperBroker::getExistingHelper('redirector');
}

// Oder, Ihn einfach empfangen, ohne darüber nachzudenken ob er bereits
// registriert wurde oder nicht:
$redirector =
    Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
}
]]></programlisting>

        <para>
            Schlußendlich, um einen registrierten Helfer vom Broker zu entfernen, kann
            <methodname>removeHelper($name)</methodname> verwendet werden, wobei
            <varname>$name</varname> der Kurzname des Helfers ist (ohne den Prefix):
        </para>

        <programlisting language="php"><![CDATA[
// Wenn vorhanden, entferne den 'redirector' Helfer vom Broker:
if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {
    Zend_Controller_Action_HelperBroker::removeHelper('redirector')
}
]]></programlisting>
    </sect2>

    <sect2 id="zend.controller.actionhelper.stockhelpers">
        <title>Eingebaute Aktions Helfer</title>

        <para>
            Zend Framework enthält standardmäßig verschiedene Action Helfer:
            <emphasis>AutoComplete</emphasis> für automatisierte Antworten für
            <acronym>AJAX</acronym> Autovervollständigung; <emphasis>ContextSwitch</emphasis> und
            <emphasis>AjaxContext</emphasis> für alternative Antwort Formate eigener Aktionen;
            einen <emphasis>FlashMessenger</emphasis> für die Behandlung von Kurznachrichten;
            <emphasis>Json</emphasis> für das verschlüsseln und senden von <acronym>JSON</acronym>
            Antworten; einen <emphasis>Redirector</emphasis>, um verschiedene Implementationen, für
            das Umleiten zu internen und externen Seiten, für die Anwendung bereitzustellen und
            einen <emphasis>ViewRenderer</emphasis> um den Prozess des Setzens eines View Objekts
            im Controller und dem Rendern von Views zu automatisieren.
        </para>

        <xi:include href="Zend_Controller-ActionHelpers-ActionStack.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-AutoComplete.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-ContextSwitch.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-FlashMessenger.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-Json.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-Redirector.xml" />
        <xi:include href="Zend_Controller-ActionHelpers-ViewRenderer.xml" />
    </sect2>

    <sect2 id="zend.controller.actionhelper.writingyourown">
        <title>Schreiben eigener Helfer</title>

        <para>
            Aktions Helfer erweitern <classname>Zend_Controller_Action_Helper_Abstract</classname>,
            eine abstrakte Klasse die das Basisinterface bietet und vom Helfer Broker funktionell
            benötigt wird. Diese inkludiert die folgenden Methoden:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>setActionController()</methodname> wird verwendet um den aktuellen
                    Aktion Controller zu setzen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>init()</methodname>, 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.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>preDispatch()</methodname>, wird vor der ausführenden Aktion
                    gestartet.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>postDispatch()</methodname> wird ausgeführt nachdem eine Aktion
                    fertig ist -- selbst wenn ein <methodname>preDispatch()</methodname> Plugin die
                    Aktion abgebrochen hat. Normalerweise nützlich für das Saubermachen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>getRequest()</methodname> empfängt das aktuelle Anfrage Objekt.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>getResponse()</methodname> empfängt das aktuelle Antwort Objekt.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>getName()</methodname> 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
                    <classname>Zend_Controller_Action_Helper_Redirector</classname> heißt, wird
                    <emphasis>Redirector</emphasis> zurückgegeben; eine Klasse die
                    <emphasis>FooMessage</emphasis> heißt wird einfach sich selbst zurückgeben.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Optional kann eine <methodname>direct()</methodname> 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 <link
                linkend="zend.controller.actionhelpers.redirector">Umleiter</link>
            <methodname>direct()</methodname> als einen Alias von <methodname>goto()</methodname>
            und erlaubt damit die Verwendung des Helfers wie folgt:
        </para>

        <programlisting language="php"><![CDATA[
// Umleiten zu /blog/view/item/id/42
$this->_helper->redirector('item', 'view', 'blog', array('id' => 42));
]]></programlisting>

        <para>
            Intern schaut die <methodname>__call()</methodname> Methode des Helfer Brokers nach
            einem Helfer der <emphasis>redirector</emphasis> heißt, prüft anschließend ob der
            Helfer eine definierte <methodname>direct()</methodname> Methode besitzt und ruft diese
            mit den angegebenen Argumenten auf.
        </para>

        <para>
            Wenn eine eigene Helfer Klasse erstellt wurde, kann man zu Ihr wie im obigen Kapitel
            beschrieben, Zugang erhalten.
        </para>
    </sect2>
</sect1>