[ZF-10089] Zend_Log
[zend.git] / documentation / manual / pl / module_specs / Zend_Controller-Plugins.xml
blobd7e2bb8f405d00c46b06fccdcb0d8af2f1a22219
1 <sect1 id="zend.controller.plugins" xmlns:xi="http://www.w3.org/2001/XInclude">
2     <title>Wtyczki</title>
4     <sect2 id="zend.controller.plugins.introduction">
5         <title>Wprowadzenie</title>
7         <para>
8             Architektura kontrolera zawiera także system wtyczek, który pozwala
9             programiście na wykonanie własnego kodu, gdy następują określone
10             zdarzenia w trakcie trwania procesu kontrolera. Kontroler frontowy
11             używa agenta wtyczek jako rejeestru dla wtyczek programisty,
12             a agent wtyczek jest odpowiedzialny za to, że metody zdarzeń są
13             wywoływane dla każdej wtyczki zarejestrowanej w kontrolerze
14             frontowym.
15         </para>
17         <para>
18             Metody zdarzeń są zdefiniowane w klasie abstrakcyjnej
19             <code>Zend_Controller_Plugin_Abstract</code>, z której dziedziczy
20             każda klasa wtyczki:
21         </para>
23         <itemizedlist>
24             <listitem>
25                 <para>
26                     Metoda <code>routeStartup()</code> jest wywoływana zanim
27                     <code>Zend_Controller_Front</code> wywoła <link
28                         linkend="zend.controller.router">router</link> w celu
29                     sprawdzenia żądania pod kątem zarejestrowanych tras.
30                 </para>
31             </listitem>
33             <listitem>
34                 <para>
35                     Metoda <code>routeShutdown()</code> jest wywoływana po tym
36                     jak <link linkend="zend.controller.router">router</link>
37                     zakończy routing żądania.
38                 </para>
39             </listitem>
41             <listitem>
42                 <para>
43                     Metoda <code>dispatchLoopStartup()</code> jest uruchamiana
44                     zanim <code>Zend_Controller_Front</code> zacznie pętlę
45                     uruchamiania.
46                 </para>
47             </listitem>
49             <listitem>
50                 <para>
51                     Metoda <code>preDispatch()</code> jest wywoływana zanim
52                     akcja zostanie uruchomiona przez
53                     <link linkend="zend.controller.dispatcher">obiekt
54                     uruchamiający</link>. Pozwala to na stworzenie
55                     funkcjonalności proxy lub filtra. Nadpisując żądanie i
56                     resetując flagę uruchomienia (za pomocą
57                     <code>Zend_Controller_Request_Abstract::setDispatched(false)</code>),
58                     obecna akcja może być pominięta lub zastąpiona.
59                 </para>
60             </listitem>
62             <listitem>
63                 <para>
64                     <code>postDispatch()</code> jest wywoływana po tym jak akcja
65                     zostanie uruchomiona przez
66                     <link linkend="zend.controller.dispatcher">obiekt
67                         uruchamiający</link>. Pozwala to na stworzenie
68                     funkcjonalności proxy lub filtra. Nadpisując żądanie i
69                     resetując flagę uruchomienia (za pomocą
70                     <code>Zend_Controller_Request_Abstract::setDispatched(false)</code>),
71                     można określić nową akcję do uruchomienia.
72                 </para>
73             </listitem>
75             <listitem>
76                 <para>
77                     Metoda <code>dispatchLoopShutdown()</code> jest wywoływana
78                     po tym jak <code>Zend_Controller_Front</code> zakończy
79                     pętlę uruchamiania.
80                 </para>
81             </listitem>
82         </itemizedlist>
83     </sect2>
85     <sect2 id="zend.controller.plugins.writing">
86         <title>Pisanie wtyczek</title>
88         <para>
89             W celu napisania klasy wtyczki, w prosty sposób rozszerz klasę
90             abstrakcyjną <code>Zend_Controller_Plugin_Abstract</code>:
91         </para>
93         <programlisting role="php"><![CDATA[
94 class MyPlugin extends Zend_Controller_Plugin_Abstract
96     // ...
98 ]]>
99         </programlisting>
101         <para>
102             Żadna z metod klasy <code>Zend_Controller_Plugin_Abstract</code> nie
103             jest abstrakcyjna, co oznacza, że nie jest konieczne implementowanie
104             wszystkich dostępnych metod zdarzeń opisanych powyżej. Autor wtyczki
105             może zaimplementować tylko te metody zdarzeń, które są mu
106             rzeczywiście potrzebne.
107         </para>
108         <para>
109             <code>Zend_Controller_Plugin_Abstract</code> udostępnia także
110             obiekty żądania i odpowiedzi wtyczkom kontrolera za pomocą metod
111             <code>getRequest()</code> oraz <code>getResponse()</code>, odpowiednio.
112         </para>
113     </sect2>
115     <sect2 id="zend.controller.plugins.using">
116         <title>Użycie wtyczek</title>
117         <para>
118             Klasy wtyczek są rejestrowane za pomocą metody
119             <code>Zend_Controller_Front::registerPlugin()</code> i mogą być
120             rejestrowane w dowolnym momencie. Poniższy kod pokazuje w jaki
121             sposób wtyczka może być użyta przez kontroler:
122         </para>
124         <programlisting role="php"><![CDATA[
125 class MyPlugin extends Zend_Controller_Plugin_Abstract
127     public function routeStartup(Zend_Controller_Request_Abstract $request)
128     {
129         $this->getResponse()->appendBody("<p>Wywołano metodę routeStartup()</p>\n");
130     }
132     public function routeShutdown(Zend_Controller_Request_Abstract $request)
133     {
134         $this->getResponse()->appendBody("<p>Wywołano metodę routeShutdown()</p>\n");
135     }
137     public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
138     {
139         $this->getResponse()->appendBody("<p>Wywołano metodę dispatchLoopStartup()</p>\n");
140     }
142     public function preDispatch(Zend_Controller_Request_Abstract $request)
143     {
144         $this->getResponse()->appendBody("<p>Wywołano metodę preDispatch()</p>\n");
145     }
147     public function postDispatch(Zend_Controller_Request_Abstract $request)
148     {
149         $this->getResponse()->appendBody("<p>Wywołano metodę postDispatch()</p>\n");
150     }
152     public function dispatchLoopShutdown()
153     {
154         $this->getResponse()->appendBody("<p>Wywołano metodę dispatchLoopShutdown()</p>\n");
155     }
158 $front = Zend_Controller_Front::getInstance();
159 $front->setControllerDirectory('/path/to/controllers')
160       ->setRouter(new Zend_Controller_Router_Rewrite())
161       ->registerPlugin(new MyPlugin());
162 $front->dispatch();
164         </programlisting>
166         <para>
167            Zakładając, że żadne wywołana akcja nie wyświetliła żadnych danych, i
168            że tylko jedna akcja została wywołana, to funkcjonalność powyższej
169            wtyczki spowoduje wyświetlenie takich danych:
170         </para>
172         <programlisting role="php"><![CDATA[
173 <p>Wywołano metodę routeStartup()</p>
174 <p>Wywołano metodę routeShutdown()</p>
175 <p>Wywołano metodę dispatchLoopStartup()</p>
176 <p>Wywołano metodę preDispatch()</p>
177 <p>Wywołano metodę postDispatch()</p>
178 <p>Wywołano metodę dispatchLoopShutdown()</p>
180         </programlisting>
182         <note>
183             <para>
184                 Wtyczki mogą być zarejestrowane w dowolnym momencie podczas
185                 uruchomienia kontrolera frontowego. Jednak jeśli zdarzenie dla
186                 którego we wtyczce była zarejestrowana metoda już minęło, to
187                 metoda ta będzie ominięta.
188             </para>
189         </note>
190     </sect2>
192     <sect2 id="zend.controller.plugins.standard">
193         <title>Wtyczki dołączone do standardowej dystrybucji</title>
195         <para>
196             Zend Framework w standardowej dystrybucji zawiera wtyczkę służącą do
197             obsługi błędów.
198         </para>
200         <xi:include href="Zend_Controller-Plugins-ActionStack.xml">
201             <xi:fallback><xi:include href="../../en/module_specs/Zend_Controller-Plugins-ActionStack.xml" /></xi:fallback>
202         </xi:include>
203         <xi:include href="Zend_Controller-Plugins-ErrorHandler.xml">
204             <xi:fallback><xi:include href="../../en/module_specs/Zend_Controller-Plugins-ErrorHandler.xml" /></xi:fallback>
205         </xi:include>
206     </sect2>
207 </sect1>