7.7. Użycie konwencjonalnej modularnej struktury katalogów
Poprzedni | Rozdział 7. Zend_Controller | Następny

## 7.7. Użycie konwencjonalnej modularnej struktury katalogów

### 7.7.1. Wprowadzenie

Konwencjonalna modularna struktura katalogów pozwala ci na oddzielenie różnych aplikacji MVC w osobne jednostki i użycie ich z różnymi kontrolerami frontowymi. Przykładem może być taka struktura katalogów:

    docroot/
        index.php
    application/
        controllers/
            IndexController.php
            FooController.php
        blog/
            controllers/
                IndexController.php
            models/
            views/
        news/
            controllers/
                IndexController.php
                ListController.php
            models/
            views/

W tym modelu, nazwa modułu uwidacznia się jako przedrostek nazw kontrolerów, ktore zawiera moduł. Powyższy przykład zawiera trzy kontrolery modułów, 'Blog_IndexController', 'News_IndexController', oraz 'News_ListController'. Dwa globalne kontrolery, 'IndexController' oraz 'FooController' są także zdefiniowane; żaden z nich nie posiada własnej przestrzeni nazw. Ta struktura katalogów będzie używana w przykładach w tym rozdziale.

Więc jak implementujesz taką strukturę katalogów używając komponentów MVC Zend Framework?

### 7.7.2. Określanie ścieżek kontrolera modułów

Pierwszym krokiem użycia modułów jest zmodyfikowanie sposobu określania listy ścieżek do kontrolerów w kontrolerze frontowym. W podstawowej wersji MVC, przekazujesz tablicę lub łańcuch znaków do metody setControllerDirectory(), lub ścieżkę do metody addControllerDirectory(). Gdy używasz modułów, musisz także odpowiednio zmienić wywołania tych metod.

W metodzie setControllerDirectory(), musisz przekazać tablicę asocjacyjną i określić pary klucz/wartość w postaci moduł/ścieżka. Specjalny klucz 'default' będzie użyty dla globalnych kontrolerów (tych, które nie potrzebują przestrzeni nazw). Wszystkie wpisy powinny zawierać łańcuch znaków wskazujący na pojedyncza ścieżkę. Na przykład:

    $front->setControllerDirectory(array(
          'default' => '/path/to/application/controllers',
          'blog'    => '/path/to/application/blog/controllers'
    ));

Metoda addControllerDirectory() przyjmuje opcjonalny drugi argument. Gdy używasz modułów, przekaż nazwę modułu jak drugi argument; jeśli nie określisz drugiego argumentu, ścieżka zostanie dodana dla domyślnej przestrzeni nazw. Na przykład:

    $front->addControllerDirectory('/path/to/application/news/controllers', 'news');

### 7.7.3. Dopasowanie tras do modułów

Domyślna trasa w `Zend_Controller_Router_Rewrite` jest obiektem typu `Zend_Controller_Router_Route_Module`. Ta trasa obsługuje takie schematy routingu:

- `:module/:controller/:action/*`

- `:controller/:action/*`

Innymi słowy, dopasuje ona tylko kontroler oraz akcję, lub wraz z poprzedzającym je modułem. Zasady dopasowania określają, że moduł będzie dopasowany tylko wtedy, gdy klucz o takiej samej nazwie istnieje w tablicy ze ścieżkami kontrolerów przekazanej do kontrolera frontowego i obiektu uruchamiającego.

### 7.7.4. Moduł lub globalny domyślny kontroler

W domyślnym routerze jeśli w URL nie został określony kontroler, użyty zostanie domyślny kontroler (`IndexController`, jeśli nie określono inaczej). Gdy używamy kontrolerów modularnych, jeśli moduł został określony, ale kontroler nie, obiekt uruchamiający wpierw będzie szukał domyślnego kontrolera w ścieżce modułu, a w drugiej kolejności będzie szukał w ścieżce dla domyślnej globalnej przestrzeni nazw 'default'.

Jeśli chcesz zawsze używać domyślnej przestrzeni nazw, ustaw parametr `useGlobalDefault` w kontrolerze frontowym:

    $front->setParam('useGlobalDefault', true);

Poprzedni | Początek rozdziału | Następny
7.6. Wtyczki | Spis treści | 7.8. Wyjątki MVC