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