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.

[Notatka] 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] 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] Notatka

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