Hoofdstuk 2 Een ZF project maken het Model-View-Controller pattern Je hebt nu ZF geïnstalleerd en geconfigureerd. We gaan aan de hand van een Zend-project onderzoeken of deze installatie en configuratie wel op de juiste manier is gegaan. Een Zend-project maken Een Zend-project maak je met Zend Tool. Dit doe je als volgt. Open het Windows Verkenner. Klik rechts met de shiftknop ingedrukt op de map C:/wamp/www. Er verschijnt een pop-up en kies hier de optie Opdrachtvenster hier openen. Het opdrachtvenster opent nu in de map C:/wamp/www (zie figuur 1). Figuur 1 Je gaat nu een Zend-Project maken in de map C:/wamp/www (de document root van de webserver) met behulp van Zend Tool.. Geef nu het volgende commando achter de prompt zf create project test Er verschijnt een hoeveelheid tekst in het opdrachtvenster waaruit blijkt dat het betreffende project wordt gecreëerd. In de map c:/wamp/www is nu een Zend-project geplaatst met de naam test. Dit project vind je in de map met de naam test. In deze map staan een aantal submappen, met daarin weer submappen en bestanden (zie figuur 2). Navigeer eens door de mappenstructuur met Windows Verkenner. Let op: verander niets in de mappenstructuur en bestanden van dit project. 1
Figuur 2 Om te testen of ZF goed geïnstalleerd en geconfigureerd is doe je het volgende: Start de webserver in Wamp. Open een webbrowser en voer de volgende url in: http://localhost/test/public In de webbrowser krijg je de webpagina van figuur 3 te zien. Figuur 3 2
Het kan voorkomen dat er een sever error optreedt. Dit heeft dan vaak te maken een serverinstelling. Deze instelling vind je in het bestand httpd.conf. Dit bestant staat in de map C:\wamp\bin\apache\Apache2.2.11\conf In dit bestand kan het voorkomen dat de volgende regel is uitgeschakeld met #: LoadModule rewrite_module modules/mod_rewrite.so Haal # voor de regel weg. Op die manier wordt rewrite module ingeschakeld. Deze module is nodig om url's te rewriten, hetgeen noodzakelijk is bij het starten van een Zend webaplicatie. Als je deze webpagina ziet, dan is ZF goed geinstalleerd en geconfigureerd. Als je geen internetverbinding hebt, dan kan de webpagina er anders uitzien, omdat de afbeeldingen in deze pagina van internet afgehaald worden. Je kunt nu werken met Zend Framework! In de komende hoofdstukken gaan we een aantal losse opdrachten maken met het project test. We gaan nog even geen complete applicatie bouwen. Als je begrijpt hoe ZF werkt, dan kun je je eerste applicatie bouwen. 3
Een virtuele host maken Om de pagina van figuur 3 zichtbaar te maken gebruik je de volgende url: http://localhost/test/public Het zou handiger zijn al deze url wat korter was, bijvoorbeeld: http://test Hiervoor zijn verschillende manieren. Eén daarvan is een virtuele host opzetten met de naam test. De lokale host (localhost) verwijst naar de map: C:\wamp\www (ervan uitgaande dat Wamp Server in de root van C: is geïnstalleerd). In dit geval laten we de virtuele host naar de map: C:\wamp\www\test\public verwijzen. Dit gaat als volgt: Open het bestand httpd.conf (dit bestand vind je in C:\wamp\bin\apache\apache2.4.2\conf. Het versienummer van apache kan in jouw geval afwijken). Plaats onderaan in dit bestand de volgende code: <VirtualHost *:80> ServerName test DocumentRoot C:/wamp/www/test/public <Directory C:/wamp/www/test/public> Options Indexes FollowSymLinks Multiviews AllowOverride All Order allow,deny Allow from all </directory> </VirtualHost> In deze code geef de naam van de virtuele host, de verwijzing naar de rootmap, en enige rechten in deze map door aan de webserver (Apache). Sla het bestand http.conf op. Open nu in C:\Windows\System32\drivers\etc het bestand hosts. In dit bestand moet je de zojuist aangemelde host ook bij Windows aanmelden. In figuur 4 zie je hoe en waar dit kan in dit bestand. 4
Figuur 4 Herstart nu de lokale webserver en test of je met de url http://test de pagina van figuur 3 te zien krijgt. Het Model-View-Controller pattern Het Model-View-Controller pattern wordt ook wel afgekort met MVC-pattern. Volgens WikipediA: Model-view-controller (of MVC) is een ontwerppatroon ("design pattern") dat het ontwerp van complexe toepassingen opdeelt in drie eenheden met verschillende verantwoordelijkheden: datamodel (model), datapresentatie (view) en applicatielogica (controller). Het scheiden van deze verantwoordelijkheden bevordert de leesbaarheid en herbruikbaarheid van code. Het maakt ook dat bijvoorbeeld veranderingen in de gebruikersinterface niet direct invloed hebben op het datamodel en vice versa. MVC werd voor het eerst gebruikt in de eerste implementaties van Smalltalk. Zoals je in bovenstaande tekst leest, hebben we te maken met drie belangrijke eenheden: Models Views Controllers In een Zend-project zien we dat deze eenheden hierin zijn vertegenwoordigd als afzonderlijke mappen (zie figuur 2). Hieronder volgt een nadere toelichting van deze eenheden. Model Het Model van een Zend-project is het deel waarin met data wordt gemanipuleerd. In het Model worden queries op een database uitgevoerd, connecties met databases gemaakt of data uit andere resources, zoals tekstbestanden en XML-files, gelezen. View In een View wordt de gebruikersinterface gemaakt. De View is wat een gebruiker ziet op het beeldscherm. Hierin vinden we html-code afgewisseld met php-code. Een view herken je aan een bestand met extensie.phtml. 5
Controller Een controller is een klasse met methodes (ook wel Actions genoemd) die gebeurtenissen afhandelen welke betrekking hebben op een Model en/of een View. Een controller bemiddelt tussen een Model en/of een View en heeft een centrale rol in je applicatie. Een Controller kan er bijvoorbeeld voor zorgen dat een methode in een model wordt uitgevoerd. De data die deze methode uit de database ophaalt, kan vervolgens door de controller naar de view worden gestuurd. In figuur 4 zie je de samenhang tussen eenheden schematisch weergegeven. Figuur 4 De pijlen geven aan dat de eenheden elkaar kunnen aanspreken. Zo kan een controller een methode van een model aanspreken, maar een model kan niet een methode van een controller aanspreken. De niet onderbroken lijnen geven aan dat een eenheid een andere eenheid direct, zonder tussenkomst van iets anders, kan aanspreken. Gestippelde lijnen geven aan dat dit aanspreken niet direct kan gebeuren. Hoe dit in z'n werk gaat leer je verderop in deze cursus. Helpers Een belangrijke rol binnen het MVC-pattern zijn helperklassen (of helpers). In een controller proberen we ons zo goed mogelijk te houden aan het afhandelen van gebeurtenissen door middel van Actions. Actions zijn methodes binnen een controllerklasse die een bepaalde gebeurtenis binnen de uitvoering van je applicatie vertegenwoordigen. Een action is altijd gekoppeld aan een view. Het kan echter best voorkomen dat je een stukje code wil maken die geen relatie heeft met het afhandelen van een gebeurtenis en/of geen relatie met een view heeft. Zo'n stukje code stop je dan in een methode van een aparte klasse: een helperklasse. In de volgende hoofdstukken ga je werken met dit MVC-pattern. Lees dit hoofdstuk nog maar eens goed door en stel eventueel vragen als je iets niet begrijpt. Het MVC-pattern begrijpen is essentieel voor het ontwikkelen van applicaties met ZF. 6