Het Zend_Controller
systeem werd gebouwd met uitbreiding
in het hoofd, ofwel door het onderklassen (subclassing) van de bestaande
klassen of door het schrijven van nieuwe klassen die de interfaces
van Zend_Controller_Router_Interface
en Zend_Controller_Dispatcher_Interface
implementeren.
Zend_Controller is gebouwd om moderne websites met "propere" URIs (weinig of geen query parameters)
te ondersteunen.
Als zodanig heeft de voorgestelde configuratie de hulp nodig van de webserver in de vorm van het
herschrijven van de URI zodat alle aanvragen naar een enkel bestand kunnen worden doorgestuurd.
Dit bestand heet "index.php" en is een bootstrap voor Zend_Controller_Front
.
Op Apache webservers word dit afgehandeld door de optionele module "mod_rewrite".
De eerste stap om de server te configureren is het succesvol installeren en activeren van "mod_rewrite". De volgende stap is het schrijven van twee bestanden in de document root: .htaccess en index.php. Het .htaccess bestand wordt door Apache gebruikt en moet een mod_rewrite regel bevatten die alle aanvragen naar index.php doorstuurt. Voor ontwikkelingsdoelen is het vaak eenvoudiger om een mod_rewrite regel te schrijven die alle aanvragen doorstuurt naar index.php, behalve een paar bestandsextensies. Hier is een voorbeeld van zulk een bestand:
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
In het voorbeeld hierboven worden alle aanvragen voor bestanden waarvan de extensie niet in de lijst staan naar index.php doorgestuurd. Dit is handig voor het ontwikkelen, maar in productie zouden de regels mappen moeten uitsluiten, geen bestandsextensies.
Na het opzetten van het .htaccess bestand, moet je een nieuw bestand index.php
aanmaken.
Dit is een bootstrap bestand. Het doel van index.php is enkel het bootstrappen van
Zend_Controller_Front, die zich bij voorkeur buiten de documentroot zou moeten bevinden.
Opmerking | |
---|---|
Het bootstrap bestand zou het enige PHP bestand moeten zijn dat in de document root is opgeslagen. |
Om veiligheidsredenen raadt Zend héél sterk aan geen PHP bestanden op te slaan in mappen die door de webserver toegankelijk zijn (submappen van de document root). Hoewel dit niet altijd mogelijk is, zoals bij gedeelde webhosting, zou dit moeten worden beschouwd als een "ideaal" en toegepast worden waar mogelijk.
Maak het bootstrap bestand, index.php
, in de document root om Zend_Controller_Front te
bootstrappen:
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/pad/naar/jouw/controllers'); ?>
Zie de volgende sectie wat betreft /pad/naar/jouw/controllers
.
Zoals aangegeven in README.txt
moet het Zend Framework pad in het include_path
staan. Indien dit niet in php.ini
geconfigureerd is, kan je set_include_path()
gebruiken in dit bestand. Let op: doe dit vòòr require_once
.
Opmerking | |
---|---|
Momenteel proberen we oplossingen te vinden die zonder de installatie van mod_rewrite kunnen werken. We denken aan een configuratieregel voor systemen met en zonder mod_rewrite mogelijkheden. Gelieve er nota van te nemen dat dit systeem niet specifiek aan Apache of mod_rewrite gebonden is, elke webserver met gelijkaardige doorstuurmogelijkheden (redirect capabilities) zou moeten volstaan. |
Het is aanbevolen dat websites gebouwd met de Zend Framework een gemeenschappelijke mappenstructuur hebben. Dit niet in alle gevallen mogelijk, maar toch voor velen en waarschijnlijk de meeste. De keuze voor deze regel is aanbevolen omdat die jouw code gemakkelijker begrijpbaar zal maken voor iemand die de Zend Framework overeenkomsten kent.
De voorgestelde mappenstructuur bestaat uit zowel bibliotheekmappen (van Zend en elders) en toepassingsmappen.
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
Opmerking | |
---|---|
Deze sectie is nog niet compleet. Ze is nog in opbouw en zal hoogstwaarschijnlijk veranderen. |
Elke site moet een controller genaamd IndexController
definiëren. Dit is de
controller die wordt bereikt indien geen enkele controller werd gespecificeerd in de URI,
zoals in volgende URI:
http://framework.zend.com/
De IndexController
klasse moet ondergebracht worden in een bestand genaamd
IndexController.php
, en dat bestand moet in de map "controllers" worden opgeslaan.
De IndexController
moet Zend_Controller_Action
onderklassen.
Hier is een voorbeeld van een IndexController
:
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { echo 'Hallo vanwege de IndexController'; } public function noRouteAction() { $this->_redirect('/'); } } ?>
Opmerking | |
---|---|
Deze sectie is nog niet compleet. Ze is nog in opbouw en zal hoogstwaarschijnlijk veranderen. |