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] 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] 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] 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] Notatka
Ta sekcja nie jest jeszcze gotowa.