4.2. Om te beginnen
Terug | Hoofdstuk 4. Zend_Controller | Volgende

## 4.2. Om te beginnen

### 4.2.1. Inleiding

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.

### 4.2.2. Server Configuratie

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.

### 4.2.3. Bootstrap Bestand

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.

### 4.2.4. Mappenstructuur

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.

### 4.2.5. IndexController

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.

Terug | Omhoog | Volgende
Hoofdstuk 4. Zend_Controller | Begin | 4.3. Onderklassen