[MANUAL] English:
[zend.git] / documentation / manual / pl / module_specs / Zend_Controller-Modular.xml
blobebbb1072862a623101980db7ec43a042e99b161d
1 <sect1 id="zend.controller.modular">
2     <title>Użycie konwencjonalnej modularnej struktury katalogów</title>
4     <sect2 id="zend.controller.modular.introduction">
5         <title>Wprowadzenie</title>
6         <para>
7             Konwencjonalna modularna struktura katalogów pozwala ci na
8             oddzielenie różnych aplikacji MVC w osobne jednostki i użycie ich
9             z różnymi kontrolerami frontowymi. Przykładem może być taka
10             struktura katalogów:
11         </para>
13         <programlisting role="php"><![CDATA[
14 docroot/
15     index.php
16 application/
17     default/
18         controllers/
19             IndexController.php
20             FooController.php
21             models/
22             views/
23                 scripts/
24                     index/
25                     foo/
26                 helpers/
27                 filters/
28     blog/
29         controllers/
30             IndexController.php
31         models/
32         views/
33             scripts/
34                 index/
35             helpers/
36             filters/
37     news/
38         controllers/
39             IndexController.php
40             ListController.php
41         models/
42         views/
43             scripts/
44                 index/
45                 list/
46             helpers/
47             filters/
48 ]]>
49         </programlisting>
51         <para>
52             W tym modelu, nazwa modułu uwidacznia się jako przedrostek nazw
53             kontrolerów, ktore zawiera moduł. Powyższy przykład zawiera trzy
54             kontrolery modułów, 'Blog_IndexController', 'News_IndexController',
55             oraz 'News_ListController'. Dwa globalne kontrolery, 'IndexController'
56             oraz 'FooController' są także zdefiniowane; żaden z nich nie posiada
57             własnej przestrzeni nazw. Ta struktura katalogów będzie używana w
58             przykładach w tym rozdziale.
59         </para>
61         <note>
62             <title>Brak przestrzeni nazw w domyślnym module</title>
63             <para>
64                 Zauważ, że w domyślnym module nazwa kontrolera nie ma
65                 przedrostka defniującego przestrzeń nazw. Dlatego w powyższym
66                 przykładzie kontrolery w domyślnym module nie potrzebują
67                 przedrostka 'Default_' -- są one po prostu uruchamiane jako
68                 'IndexController' oraz 'FooController'. Przedrostek definiujący
69                 przestrzeń nazw jest jednak używany we wszystkich innych
70                 modułach.
71             </para>
72         </note>
74         <para>
75             Więc jak implementujesz taką strukturę katalogów używając
76             komponentów MVC Zend Framework?
77         </para>
78     </sect2>
80     <sect2 id="zend.controller.modular.directories">
81         <title>Określanie ścieżek kontrolera modułów</title>
83         <para>
84             Pierwszym krokiem użycia modułów jest zmodyfikowanie sposobu
85             określania listy ścieżek do kontrolerów w kontrolerze frontowym.
86             W podstawowej wersji MVC, przekazujesz tablicę lub łańcuch znaków
87             do metody <code>setControllerDirectory()</code>, lub ścieżkę do
88             metody <code>addControllerDirectory()</code>. Gdy używasz modułów,
89             musisz także odpowiednio zmienić wywołania tych metod.
90         </para>
92         <para>
93             W metodzie <code>setControllerDirectory()</code>, musisz przekazać
94             tablicę asocjacyjną i określić pary klucz/wartość w postaci
95             moduł/ścieżka. Specjalny klucz <code>default</code> będzie użyty dla
96             globalnych kontrolerów (tych, które nie potrzebują przestrzeni nazw).
97             Wszystkie wpisy powinny zawierać łańcuch znaków wskazujący na
98             pojedynczą ścieżkę, a klucz <code>default</code> musi istnieć. Na
99             przykład:
100         </para>
102         <programlisting role="php"><![CDATA[
103 $front->setControllerDirectory(array(
104       'default' => '/path/to/application/controllers',
105       'blog'    => '/path/to/application/blog/controllers'
108         </programlisting>
110         <para>
111             Metoda <code>addControllerDirectory()</code> przyjmuje opcjonalny
112             drugi argument. Gdy używasz modułów, przekaż nazwę modułu jak drugi
113             argument; jeśli nie określisz drugiego argumentu, ścieżka zostanie
114             dodana dla domyślnej przestrzeni nazw. Na przykład:
115         </para>
117         <programlisting role="php"><![CDATA[
118 $front->addControllerDirectory('/path/to/application/news/controllers', 'news');
120         </programlisting>
122         <para>
123             Zostawiając najlepsze na koniec, najprostszym sposobem określenia
124             katalogu modułów jest określenie ich wszystkich na raz, gdy
125             wszystkie moduły znajdują się w jednym katalogu i posiadają taką
126             samą strukturę. Można to zrobić za pomocą metody
127             <code>addModuleDirectory()</code>:
128         </para>
130         <programlisting role="php"><![CDATA[
132  * Zakładając, że tak wygląda struktura katalogów:
133  * application/
134  *     modules/
135  *         default/
136  *             controllers/
137  *         foo/
138  *             controllers/
139  *         bar/
140  *             controllers/
141  */
142 $front->addModuleDirectory('/path/to/application/modules');
144         </programlisting>
146         <para>
147             Powyższy przykład definiuje moduły <code>default</code>,
148             <code>foo</code>, oraz <code>bar</code>, każdy wskazujący na
149             podkatalog <code>controllers</code> danego modułu.
150         </para>
152         <para>
153             Możesz określić nazwę podkatalogu kontrolerów używaną w modułach
154             za pomocą metody <code>setModuleControllerDirectoryName()</code>:
155         </para>
157         <programlisting role="php"><![CDATA[
159  * Zmieniamy nazwę podkatalogu kontrolerów na 'con'
160  * application/
161  *     modules/
162  *         default/
163  *             con/
164  *         foo/
165  *             con/
166  *         bar/
167  *             con/
168  */
169 $front->setModuleControllerDirectoryName('con');
170 $front->addModuleDirectory('/path/to/application/modules');
172         </programlisting>
174         <note><para>
175             Możesz określić aby podkatalog kontrolerów nie był używany w
176             modułach, przekazując pustą wartość do metody
177             <code>setModuleControllerDirectoryName()</code>.
178         </para></note>
179     </sect2>
181     <sect2 id="zend.controller.modular.router">
182         <title>Dopasowanie tras do modułów</title>
184         <para>
185             Domyślna trasa w
186             <code>Zend_Controller_Router_Rewrite</code> jest obiektem typu
187             <code>Zend_Controller_Router_Route_Module</code>. Ta trasa obsługuje
188             takie schematy routingu:
189         </para>
191         <itemizedlist>
192             <listitem><para><code>:module/:controller/:action/*</code></para></listitem>
193             <listitem><para><code>:controller/:action/*</code></para></listitem>
194         </itemizedlist>
196         <para>
197             Innymi słowy, dopasuje ona tylko kontroler oraz akcję, lub wraz
198             z poprzedzającym je modułem. Zasady dopasowania określają, że
199             moduł będzie dopasowany tylko wtedy, gdy klucz o takiej samej nazwie
200             istnieje w tablicy ze ścieżkami kontrolerów przekazanej do kontrolera
201             frontowego i obiektu uruchamiającego.
202         </para>
204     </sect2>
206     <sect2 id="zend.controller.modular.defaultcontroller">
207         <title>Moduł lub globalny domyślny kontroler</title>
209         <para>
210             W domyślnym routerze jeśli w URL nie został określony kontroler,
211             użyty zostanie domyślny kontroler (<code>IndexController</code>,
212             jeśli nie określono inaczej). Gdy używamy kontrolerów modularnych,
213             jeśli moduł został określony, ale kontroler nie, obiekt
214             uruchamiający wpierw będzie szukał domyślnego kontrolera w ścieżce
215             modułu, a w drugiej kolejności będzie szukał w ścieżce dla domyślnej
216             globalnej przestrzeni nazw 'default'.
217         </para>
219         <para>
220             Jeśli chcesz zawsze używać domyślnej przestrzeni nazw, ustaw
221             parametr <code>useDefaultControllerAlways</code> w kontrolerze frontowym:
222         </para>
224         <programlisting role="php"><![CDATA[
225 $front->setParam('useDefaultControllerAlways', true);
227         </programlisting>
228     </sect2>
229 </sect1>