Das Zend_Controller
System wurde im Sinne der Erweiterungsmöglichkeiten
entwickelt, entweder durch Erstellen von Subklassen, welche die bestehenden Klassen
erweitern, oder durch Erstellen neuer Klassen, welche die verschiedenen Interfaces
und abstrakten Klassen implementieren, welche das Fundament der Controller
Klassenfamilie bilden.
Zend_Controller wurde entwickelt, um moderne Website mit sauberen URIs (wenige oder gar
keine Abfrage Parameter) zu unterstützen. Deshalb benötigt die vorgeschlagene
Konfiguration für den Webserver eine Unterstützung in Form von URI Rewriting, um alle
Anfragen auf eine einzelne Datei ("index.php") umzuleiten, die lediglich
Zend_Controller_Front
lädt. Auf dem Apache Webserver wird dies durch das
optionale Modul mod_rewrite erledigt.
Der erste Schritt beim Konfigurieren des Servers ist, mod_rewrite erfolgreich zu installieren und zu aktivieren. Der nächste Schritt ist das Anlegen zweier Dateien im Hauptverzeichnis: .htaccess und index.php. Die .htaccess Datei wird von Apache verwendet und muss eine Regel für mod_rewrite enthalten, um alle Anfragen auf die index.php Datei umzuleiten. Für Entwicklungszwecke ist es oft am einfachsten, eine Regel für mod_rewrite zu schreiben, welche alle Anfragen auf index.php umleitet mit Ausnahme von bestimmten Dateiendungen. Hier ist ein Beispiel einer solchen Datei:
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Im obigen Beispiel werden alle Anfragen, die keine der genannten Dateiendungen enthalten, an index.php weitergeleitet. Dies ist nützlich für die Entwicklung, allerdings sollten diese Regeln in der Produktionsumgebung so geändert werden, dass stattdessen Verzeichnise ausgeschlossen werden.
Ort der Ladedatei | |
---|---|
Die Ladedatei sollte die einzige PHP Datei sein, die im Hauptverzeichnis abgelegt ist. |
Nichtsdestoweniger unterstützt die Basisfunktionalität von Zend_Controller auch URLs,
welche Abfrageparameter verwenden - wie z.B.
index.php?controller=foo&action=bar
. Zusätzlich funktioniert ein
weiterer mitgelieferter Router, Zend_Controller_RewriteRouter
, in einer
Vielzahl von Umgebungen, inklusive vieler, die keine mod_rewrite ähnlichen
Möglichkeiten bieten. Wenn du mod_rewrite oder etwas Entsprechendes nicht verwenden
kannst, kannst du dennoch Zend_Controller für deine Site verwenden.
Nach dem Aufsetzen der .htaccess Datei wird eine neue Datei mit Namen
index.php
erstellt. Dies ist eine Ladedatei (englisch bootstrap file).
Der Zweck der index.php Datei ist nur, Zend_Controller_Front zu laden, dessen Datei
idealerweise außerhalb des Hauptverzeichnisses liegt.
Anmerkung | |
---|---|
Die Ladedatei sollte die einzige PHP Datei sein, die im Hauptverzeichnis abgelegt ist. |
Aus Sicherheitsgründen empfiehlt Zend sehr stark, keine PHP Dateien in Verzeichnissen abzulegen, die vom Webserver aus erreichbar sind (solche, die unterhalb des Hauptverzeichnis liegen). Während dies nicht in jeder Umgebung möglich ist, z.B. beim Shared Hosting, sollte dies als optimales Verfahren (best practice) betrachtet und befolgt werden, wenn immer es möglich ist.
Erstelle eine Ladedatei index.php
im Hauptverzeichnis, um
Zend_Controller_Front zu laden:
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/path/to/your/controllers'); ?>
Siehe den nächsten Abschnitt bezüglich der Pfadangaben /path/to/your/controllers
.
Wie in der README.txt
Datei angewiesen, sollte das Verzeichnis der Zend
Framework Bibliothek im include_path
enthalten sein. Wenn dies nicht in
der php.ini
Datei gesetzt wird, kann in der index.php
Datei
die Funktion set_include_path()
vor der Anweisung require_once()
aufgerufen werden.
Für Websites, die auf dem Zend Framework aufsetzen, wird die Verwendung einer gemeinsamen Verzeichnisstruktur empfohlen. Während dies nicht in jedem Fall möglich ist, sollte es in vielen, vielleicht in den meisten Fällen so sein. Die Entscheidung, diese Struktur zu übernehmen, macht deinen Code für jemanden leichter verständlich, der mit den Konventionen des Zend Frameworks vertraut ist.
Die vorgeschlagene Verzeichnisstruktur besteht aus dem Verzeichnis für Bibliotheken (von Zend oder anderen) und dem Verzeichnis für die Applikation.
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
Anmerkung | |
---|---|
Dieser Abschnitt ist noch nicht fertig. Er ist in Bearbeitung und unterliegt laufenden Änderungen. |
Jede Website muss einen Default Controller definieren. Dies ist der Controller, der aufgerufen wird, wenn kein Controller in der URI angegeben ist, wie z.B. in dieser URI:
http://framework.zend.com/
In der mitgelieferten Konfiguration sollte der Default Controller
IndexController
genannt und in einer Datei mit Namen
IndexController.php
definiert werden. Intern wird er als der Controller
'index' referenziert.
Man kann den Default Controller vor dem Dispatching durch den Front Controller ändern,
indem die setDefaultController()
Methode entweder vom Front Controller oder
vom Dispatcher Objekt aufgerufen wird. Wenn man das tut, sollte man die internen
Namenskonventionen verwenden. Folglich wird die Klasse HomeController
(in
der HomeController.php
Datei) referenziert als home
.
Controller sollten die Zend_Controller_Action
Klasse erweitern und im
Controllerverzeichnis abgelegt werden.
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { echo 'Hello from IndexController'; } public function noRouteAction() { $this->_redirect('/'); } } ?>
Weitere Details über den Default Controller und die Default Aktion sowie über das Schreiben von Aktioncontroller Klassen, werden in weiteren Kapiteln bereit gestellt.
Anmerkung | |
---|---|
Dieser Abschnitt ist noch nicht fertig. Er ist in Bearbeitung und unterliegt laufenden Änderungen. |