7.2. Pierwsze kroki
Poprzedni | Rozdział 7. Zend_Controller | Następny

## 7.2. Pierwsze kroki

### 7.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 różne interfejsy oraz klasy abstrakcyjne, które są podstawą rodziny klas kontrolera.

### 7.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.

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

Podstawowa funkcjonalność Zend_Controller także obsługuje adresy URL zawierające parametry -- na przykład jak w adresie `index.php?controller=foo&action=bar`. Dodatkowo, inny dołączony router, `Zend_Controller_RewriteRouter`, działa w różnych środowiskach, włączając w to wiele środowisk nie posiadających możliwości takich jakie ma mod_rewrite. Jeśli nie możesz użyć mod_rewrite lub odpowiednika, wciąż będziesz mógł użyć Zend_Controller dla swojego serwisu.

### 7.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.

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()`.

### 7.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. Jest ona w trakcie tworzenia i w przyszłości będzie zmieniona.

### 7.2.5. Domyślny kontroler

Każda witryna musi mieć zdefiniowany domyślny kontroler. 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/

W dołączonej konfiguracji domyślny kontroler powinien nazywać się `IndexController`, i powinien być zdefiniowany w pliku `IndexController.php`. Wewnętrznie odpowiada to kontrolerowi o nazwie 'index'.

Możesz zmienić nazwę domyślnego kontrolera przed uruchomieniem kontrolera frontowego wywołując metodę `setDefaultController()` obiektu kontrolera frontowego lub obiektu dispatchera. Kiedy to robisz, używaj wewnętrznych konwencji nazewnictwa. Dlatego klasa `HomeController` (w pliku `HomeController.php`) odpowiadałaby kontrolerowi `home`.

Kontrolery powinny rozszerzać klasę `Zend_Controller_Action` i powinny być umieszczone w ścieżce kontrolerów.

    <?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('/');
    	}
    }

    ?>

Więcej szczegółów na temat domyślnego kontrolera i akcji, jak i tworzenia akcji klas kontrolera będzie w następnych rozdziałach.

| Notatka
Ta sekcja nie jest jeszcze gotowa. Jest ona w trakcie tworzenia i w przyszłości będzie zmieniona.

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