4.2. Pierwsze kroki
Poprzedni | Rozdział 4. Zend_Controller | Następny

## 4.2. Pierwsze kroki

### 4.2.1. Wprowadzenie

Klasa `Zend_Controller` została zbudowana w sposób bardzo elastyczny. Można ją rozwijać rozszerzając klasy istniejące lub pisząc nowe klasy implementujące interfejsy `Zend_Controller_Router_Interface` oraz `Zend_Controller_Dispatcher_Interface`.

### 4.2.2. Konfiguracja serwera

Klasa Zend_Controller została zbudowana w celu zapewnienia nowoczesnym witrynom estetycznych adresów URL (bez parametrów lub z ich małą ilością). Wymaga to zmian w konfiguracji serwera www w kwestii przekierowania żądań do pojedynczego pliku nazwanego "index.php". Ma on za zadanie ładować klasę `Zend_Controller_Front`. Na serwerach Apache funkcjonalność taka jest dostarczana przez opcjonalny moduł mod_rewrite.

Pierwszym krokiem w konfiguracji serwera jest instalacja i uaktywnienie mod_rewrite. Następnym krokiem jest stworzenie dwóch plików w głównym katalogu serwera www: .htaccess oraz index.php. Plik .htaccess jest używany przez serwer Apache i musi zawierać reguły mod_rewrite aby przekierować wszystkie żądania do pliku index.php. Najprostszym rozwiązaniem jest napisanie reguły mod_rewrite, która przekieruje wszystkie żądania do pliku index.php z wyjątkiem żądań do plików o wybranych rozszerzeniach. Oto przykład takiego pliku:

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

W powyższym przykładzie wszystkie żądania do plików o rozszerzeniach innych niż wymienione zostaną przekazane do pliku ładującego index.php. Jest to użyteczne podczas tworzenia aplikacji, jednak potem reguły powinny wyłączać konkretne katalogi.

### 4.2.3. Plik ładujący

Po ustawieniu pliku .htaccess file, utwórz nowy plik o nazwie `index.php`. Jest to plik ładujący. Jego zadaniem jest jedynie załadowanie klasy Zend_Controller_Front, która powinna być umieszczona poza głównym katalogiem serwera.

| Notatka
Plik ładujący powinien być jedynym plikiem PHP umieszczonym w głównym katalogu serwera www.

Ze względów bezpieczeństwa Zend odradza przechowywanie jakichkolwiek plików PHP w ścieżkach dostępnych poprzez serwer www (wewnątrz głównego katalogu serwera www). Jest to bardzo dobrą praktyką, powinna być ona stosowana zawsze gdy jest to możliwe.

Utwórz plik ładujący o nazwie `index.php` w głównym katalogu serwera www aby załadować klasę Zend_Controller_Front:

    <?php

    require_once 'Zend/Controller/Front.php';

    Zend_Controller_Front::run('/sciezka/do/kontrolerow');

    ?>

Przeczytaj następna sekcję odnośnie do `/path/to/your/controllers`. Jak napisano w pliku `README.txt`, ścieżka do katalogu zawierającego bibliotekę Zend Framework musi być podana w dyretywie `include_path`. Jeśli nie jest ona ustawiona w pliku `php.ini`, możesz użyć funkcji `set_include_path()` w tym pliku, zanim użyjesz `require_once()`.

| Notatka
Obecnie szukamy sposobu nie wymagającego instalacji mod_rewrite. Chcemy zaproponować konfigurację zarówno dla systemów używających mod_rewrite jak i dla tych które tego modułu nie używają. Proszę także zwrócić uwagę na to, że ta funkcjonalność nie jest tylko przeznaczona dla serwera Apache, ale także dla każdego innego serwera posiadającego podobne możliwości w zakresie przekierowań żądań do plików.

### 4.2.4. Struktura katalogów

Zalecane jest aby witryny zbudowane w oparciu o Zend Framework miały podobną strukturę katalogów. Nie zawsze jest to możliwe, jednak w większości przypadków jest. Zgodność z tą strukturą spowoduje, że kod będzie bardziej zrozumiały dla osób zaznajomionych z konwencjami Zend Framework.

Zalecena struktura katalogów dotyczy zarówno bibliotek (Zend oraz wszystkich innych) jak i struktury katalogów samej aplikacji.

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| Notatka
Ta sekcja nie jest jeszcze gotowa.

### 4.2.5. IndexController

Każda witryna musi mieć zdefiniowany kontroler o nazwie `IndexController`. Jest to kontroler który jest wywoływany kiedy w adresie URL nie ma określonego kontrolera, np. w takim adresie:

    http://framework.zend.com/

Klasa `IndexController` musi być umieszczona w pliku `IndexController.php`, a plik musi być umieszczony w katalogu kontrolerów. Klasa `IndexController` musi rozszerzać klasę `Zend_Controller_Action`. Oto przykład klasy `IndexController`:

    <?php

    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
    	public function indexAction()
    	{
    		echo 'Zostal wywolany IndexController';
    	}

    	public function noRouteAction()
    	{
    		$this->_redirect('/');
    	}
    }

    ?>

| Notatka
Ta sekcja nie jest jeszcze gotowa.

Poprzedni | Początek rozdziału | Następny
Rozdział 4. Zend_Controller | Spis treści | 4.3. Rozszerzanie