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>
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
13 <programlisting role="php"><![CDATA[
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.
62 <title>Brak przestrzeni nazw w domyślnym module</title>
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
75 Więc jak implementujesz taką strukturę katalogów używając
76 komponentów MVC Zend Framework?
80 <sect2 id="zend.controller.modular.directories">
81 <title>Określanie ścieżek kontrolera modułów</title>
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.
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
102 <programlisting role="php"><![CDATA[
103 $front->setControllerDirectory(array(
104 'default' => '/path/to/application/controllers',
105 'blog' => '/path/to/application/blog/controllers'
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:
117 <programlisting role="php"><![CDATA[
118 $front->addControllerDirectory('/path/to/application/news/controllers', 'news');
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>:
130 <programlisting role="php"><![CDATA[
132 * Zakładając, że tak wygląda struktura katalogów:
142 $front->addModuleDirectory('/path/to/application/modules');
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.
153 Możesz określić nazwę podkatalogu kontrolerów używaną w modułach
154 za pomocą metody <code>setModuleControllerDirectoryName()</code>:
157 <programlisting role="php"><![CDATA[
159 * Zmieniamy nazwę podkatalogu kontrolerów na 'con'
169 $front->setModuleControllerDirectoryName('con');
170 $front->addModuleDirectory('/path/to/application/modules');
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>.
181 <sect2 id="zend.controller.modular.router">
182 <title>Dopasowanie tras do modułów</title>
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:
192 <listitem><para><code>:module/:controller/:action/*</code></para></listitem>
193 <listitem><para><code>:controller/:action/*</code></para></listitem>
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.
206 <sect2 id="zend.controller.modular.defaultcontroller">
207 <title>Moduł lub globalny domyślny kontroler</title>
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'.
220 Jeśli chcesz zawsze używać domyślnej przestrzeni nazw, ustaw
221 parametr <code>useDefaultControllerAlways</code> w kontrolerze frontowym:
224 <programlisting role="php"><![CDATA[
225 $front->setParam('useDefaultControllerAlways', true);