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