Zend Framework Handleiding header image
Zend Framework Handleiding random header image

2: Het Zend Framework werkend krijgen

May 5th, 2008 · 3 Comments

Nu onze mappen staan, zoals in de vorige post is beschreven of op je eigen manier, kunnen we kijken of we het Zend Framework aan de praat krijgen. Dit zal wel even duren, dus ga er maar goed voor zitten.

Een aanname die ik ga maken, is dat je heel klein beetje bekend bent met MVC, wat wil zeggen dat je weet wat het  inhoud. Anders kun je er op deze pagina meer over lezen:

http://en.wikipedia.org/wiki/Model-view-controller

Update: Inmiddels heb ik ook een kleine inleiding over MVC en het framework geschreven, zie hiervoor (eerst) post 0.b.

Hoewel deze structuur niet per se noodzakelijk is om ZF nuttig te kunnen gebruiken, zit een deel van de kracht wel hierin. Omdat ik zelf deze Design Pattern me graag eigen maak, ga ik dit wel gebruiken, gedurende de hele handleiding. Het vele gebruik ervan maakt het voor mij de moeite om te proberen.

Basis werking van het framework

Wanneer er een pagina wordt opgeroepen, wordt deze door je server afgehandeld. Afhankelijk van de url, kiest je server de pagina. Bij het framework willen we alle aanvragen (requests) over één file laten lopen, die vervolgens het werk stuurt naar de Controllers. Alle request dienen dus ook gedaan te worden naar (bijvoorbeeld) http://localhost/index.php. Eventuele paramters kunnen mee worden gegeven. Omdat het herhalen van index.php niet mooi staat, gaan we dit door middel van htaccess automatisch toevoegen.

Wanneer dit gebeurt is kunnen we in onze index de request door gaan sturen naar de Controllers (die we nog moeten maken). Daar zal ik ook even kort behandelen hoe de index weet welke controller hij moet hebben.

htaccess

Om index.php weg te laten, en gebruik te maken van vriendelijke urls, gaan we gebruik maken van Apache’s Mod_Rewrite. Daarom plaatsen we in de public folder een .htaccess file met de volgende inhoud:

<IfModule mod_rewrite.c> 
    # Rewrite rules for Zend Framework
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php
</IfModule>    
    # Security: Don’t allow browsing of directories
    Options -Indexes

Om kort te zijn, sturen we elke request naar een bestand dat niet bestaat door naar index.php. Tevens voegen we een regel toe zodat mensen geen directories kunnen lezen.

Index.php

Nu zullen we dus wel iets in de index.php file moeten zetten. Hier gaan we het eerste deel van het Zend Framework starten en de requests afhandelen. Dit gebeurd in de zogenaamde bootstrapfile. In het verleden stond in de index file direct de bootstrap, nu is de best practice om deze in de applicatiefolder te zetten. 

De index.php in de public folder bestaat nu uit het volgende:

<?php
require ‘../application/bootstrap.php’;

En dat is alles. Let op dat er geen sluitende php tag (?>) is. Dit is een coding practice die voortkomt uit de ZF-community.

http://framework.zend.com/manual/en/coding-standard.html

Ik houd me denk ik niet aan alle regeltjes, maar een boel zijn toch handig. De genoemde regel zorgt er namelijk voor dat je nooit inhoud kunt hebben aan het eind van je file, wat problemen kan geven met het sturen van headers.

Bootstrap

Goed, in de application folder gaan we nu de bootstrap.php aanmaken. Hieronder zie je de inhoud, daarna zal ik deze bespreken.

   1: <?php   
   2:   
   3: /* Zet de error_reporting aan, en zet de tijzone op nederlandse tijd */
   4: error_reporting(E_ALL|E_STRICT);
   5: ini_set(‘display_errors’, 1);
   6: date_default_timezone_set(‘Europe/Amsterdam’);  
   7:   
   8: /* Nu moeten we wel de library include */
   9: set_include_path(‘../library’ . PATH_SEPARATOR . get_include_path());    
  10:   
  11: /* Zend laden en autoladen aanzetten */  
  12: require_once "Zend/Loader.php";   
  13: Zend_Loader::registerAutoload();   
  14:   
  15: /* Frontcontroller ‘ophalen’ */  
  16: $frontController = Zend_Controller_Front::getInstance();   
  17: /* errors weergeven */  
  18: $frontController->throwExceptions(true);   
  19: /* zorgen dat ZF weet waar de controllers zijn */  
  20: $frontController->setControllerDirectory(‘../application/default/controllers’, ‘default’);   
  21: /* Draaien */  
  22: $frontController->dispatch();  

We beginnen met ervoor te zorgen dat als er een fout is, we deze tevoorschijn toveren. Voor een productieomgeving is dit natuurlijk niet gewenst, maar voor test en develpment omgevingen is het des te beter. Vervolgens zetten we de tijd goed. Dit is allemaal nog niet erg interessant.

In regel 9 zorgen we ervoor dat we makkelijk het ZF kunnen vinden door de library aan het includepath toe te voegen.

In 12 en 13 zorgen we ervoor dat we ons zelf heel wat werk besparen. De Zend_Loader class zorgt ervoor dat we makkelijk files kunnen laden, met bijvoorbeeld de Zend_Loader::loadFile() fuctie. Maar nog makkelijker maken we het onszelf door door middel van de registerAutoload() functie het automatisch laden van bestanden aan te zetten. Nu hoeven we niet elke file uit het framework zelf te includen, maar gebeurt dit automatisch als we een class gebruiken. Dit komt dus overeen met de autoload functie nieuw in PHP 5. Om de informatie compleet te maken bevat de Zend_Loader class nog een loadClass functie en een isReadable functie, waarvan de namen voor zich spreken. De syntax vind je hier:

http://framework.zend.com/manual/en/zend.loader.html

FrontController

Vervolgens gaan we het framework aan het werk zetten. De Zend_Controller_Front class zorgt voor ons MVC-pattern. Dit is dus een belangrijke class voor ons. Omdat er maar een instance kan bestaan van deze class (singleton pattern), halen we deze eerst op. Vervolgens zorgen we dat de errors aan staan, en geven we aan waar de controllers zich bevinden. Ondanks dat er een verkorte syntax is, wil ik toch graag specifiek aangeven dat we hier de default controllers plaatsen, omdat we laten ook hier aan moeten geven waar ZF onze modules kan vinden. Vervolgens zetten we de Controller aan het werk met behulp van dispatch. Meer informatie vind je hier:

http://framework.zend.com/manual/en/zend.controller.front.html

Eindelijk wordt het dan tijd om te gaan kijken of we ergens komen: http://localhost/

Als het goed is krijg je nu een grote foutmelding. Want we hebben ZF wel naar een controller directory verwezen, maar daar zijn nog geen controllers.

Het Zend Framework bepaalt aan de hand van de url welke Controller hij moet lezen. De Url wordt als volgt ontleed: http://baseurl/Controller/Action/. Meer hierover volgt later in een tutorial over Routing in het Zend Framework. Wanneer er geen controller is gespecificeerd, kijkt het Zend framework http://baseurl/index/index/ . De file die we dus moeten maken is /application/default/controllers/indexController.php

Om deze controller te laten werken, moeten we de Zend_Controller_Action class implementeren. Hoewel we hierdoor heel veel mogelijkheden krijgen om op verschillende punten in het proces in te haken, willen we nu gewoon even wat resultaat. dus geven we de file de volgende inhoud:

   1: <?php
   2: class IndexController extends Zend_Controller_Action   
   3: {   
   4:     public function indexAction()   
   5:     {   
   6:         echo "indexAction";
   7:     }   
   8: }  

De indexAction is de default action die de zend controller uitvoert. Voor het gebruik van de MVC structuur met ZF zijn we verplicht zowel een Controller als een View te maken. Het Model is optioneel, en slaan we nu even over, maar zullen we snel toe voegen. De default location voor de indexAction om te kijken naar een view script is in \application\default\views\scripts\index\index.phtml waarbij de laatste twee indexen staan voor respectievelijk de controller en de actie. Voor nu laten we deze file gewoon leeg, maar maken we hem wel even.

Als je nu naar http://localhost/ gaat, zou je de tekst "indexAction" moeten zien, en zijn we al een heel eind op weg naar het functioneel gebruiken van het Zend Framework. In de volgende post zullen we kijken hoe we de view kunnen implementeren en daarbij op verschillende manier gebruik kunnen maken van templates.

Stem of voeg toe aanUitleg over het gebruik van deze icons :  Plaatsen/stemmen op NUjij Plaatsen/stemmen op eKudos Plaatsen/stemmen op MSN Reporter Plaatsen/stemmen op Digg Stumble it! Voeg dit artikel toe aan Del.icio.us Voeg toe aan je Google bladwijzers Abonneer je op de RSS-feed van deze site Verstuur deze pagina per e-mail via Feedburner

Tags: Zend Framework

3 responses so far ↓

  • 1 henk // Sep 7, 2008 at 12:32

    super deze tut

  • 2 dolcegabie // Dec 19, 2008 at 12:55

    ik krijg zend niet werkend op een windows. Wat moet ik nou precies zetten in mn htacces file???

  • 3 Bram // Dec 22, 2008 at 23:05

    Dat wat boven staat, onder het kopje .htaccess moet je letterlijk plaatsen. de Bestandsnaam moet dus .htaccess zijn.
    Je moet er wel voor zorgen dat er geen ‘verborgen bekende extentie’ (zoals .txt) nog achterstaat.

Leave a Comment