Décompressez-le et placez le répertoire racine zscope dans htdocs.. un répertoire application, avec tout le code d’une application MVC, à savoir les contrôleurs, les modèles et les vues
Trang 1précédents, et propose quelques fonctionnalités implantées avec le ZF Vous pouvez
en récupérer le code sur le site du livre
9.1 MISE EN ROUTE
La première chose à faire est d’installer le ZF et notre application Une fois que cela fonctionne, lisez la fin de cette section qui présente l’organisation du code et les conventions d’écriture du ZF Ce n’est pas évident, surtout au début, et il vaut mieux comprendre d’emblée comment cela fonctionne
9.1.1 Installation d’une application ZF
La tâche la plus simple est d’installer le Zend Framework Allez sur le site
http://framework.zend.com/ et récupérez l’archive contenant l’ensemble des
composants La version courante au moment ó ces lignes sont écrites est la 1.6, et nous pouvons nous contenter de la version minimale, sans les utilitaires JavaScript
Dojo.
Décompressez l’archive On obtient un répertoire ZendFramework-1.6 contenant
un sous-répertoire library Ce sous-répertoire contient lui-même un répertoire Zend qui est la racine de l’ensemble des classes du framework Copiez
ZendFramework-1.6 sur votre disque, à un endroit accessible au serveur web Vous pouvez aussi le
renommer Dans notre cas, il s’agit de ZF, placé dans /usr/local/share.
REMARQUE –Le ZF est très flexible et tout ou presque tout (noms de répertoires, organisation des répertoires, etc.) est paramétrable Nous allons être assez directif pour éviter
de nous embrouiller avec une longue liste d’options Une fois que vous aurez compris les principes, vous pourrez vous lancer dans les variantes si vous le souhaitez.
Maintenant, récupérez l’archive du ZSCOPE, sur notre site Décompressez-le et
placez le répertoire racine zscope dans htdocs Une autre possibilité est de récupérer
le code sur le site CVS de http://webscope.cvs.sourceforge.net pour pouvoir faire des
modifications et améliorer le ZSCOPE Un défi possible, si plusieurs lecteurs sont intéressés, est de refondre le WEBSCOPEdéveloppé avec notre MVC personnel, en
une nouvelle version entièrement basée sur le Zend Framework Si vous êtes tentés,
allez voir sur le site de SourceForge l’état des choses au moment ó vous lisez ce livre Après cette installation initiale, il n’est pas encore possible d’accéder à ZSCOPE
avec l’URL http://localhost/zscope, car le ZF s’appuie sur un principe de redirection et
de réécriture des requêtes HTPP dont il faut au préalable s’assurer le bon fonction-nement
Trang 29.1.2 Redirection des requêtes avec le ZF
L’application ZSCOPEcontient deux sous-répertoires :
1 un répertoire application, avec tout le code d’une application MVC, à savoir
les contrôleurs, les modèles et les vues ; voir plus loin pour des détails ;
2 un répertoire www destiné à contenir la partie publique de l’application,
autrement dit tous les fichiers qui peuvent être directement référencés par une URL, et seulement ceux-là
L’idée est que tous les fichiers qui peuvent être directement envoyés à un
navi-gateur (images, PDF, CSS, Javascript, etc.) sont dans www Le code de l’application elle-même n’est pas dans www mais dans application, afin d’interdire qu’on puisse
accéder avec un navigateur à ce code, pour limiter les risques de fuite
Le seul fichier PHP qui se trouve dans www est index.php C’est lui qui charge les
parties de l’application nécessaires à la satisfaction d’une requête HTTP, et toutes
ces requêtes lui sont adressées sans exception Voilà pour les principes Leur mise en œuvre suppose un peu de configuration
Configuration d’un hôte virtuel
À la base, le site est accessible à l’URL http://localhost/zscope/www (au besoin rem-placez localhost par le nom de votre machine) On peut s’en contenter sur un site de test, mais rien n’empêche de tenter d’accéder à http://localhost/zscope/application, ce
que l’on veut éviter
Le serveur Apache permet la définition d’hôtes virtuels qui correspondent à un site
particulier, sur une machine particulière On peut avoir plusieurs hôtes virtuels pour
un même serveur web, ce qui mène à engendrer (virtuellement) plusieurs espaces de noms correspondant à la même adresse IP
Pour définir un hôte virtuel, éditez le fichierhttpd.conf et ajoutez le bloc d’instruc-tions suivant :
NameVirtualHost *:80
<VirtualHost *:80>
ServerName zscope.local
DocumentRoot /Applications/MAMP/htdocs/zscope/www
</VirtualHost>
Il faut de plus associer le nom zscope.local à l’IP 127.0.0.1 de la machine locale (si vous travaillez sur la machine locale) Pour cela on ajoute la ligne suivante dans
/etc/hosts(sur Linux ou Mac OS) ou c:/windows/system32/drivers/etc/hosts (Windows) Maintenant, redémarrez Apache, et vous devriez pouvoir accéder au site
ZSCOPEà l’URL http://zscope.local Toute l’arboresscence du site externe à www, et
en particulier application, est devenue invisible et inaccessible.
Trang 3Tout rediriger vers index.php
La seconde partie de la configuration consiste à effectuer une réécriture des requêtes HTTP pour les rediriger systématiquement vers le fichierindex.php On utilise pour cela
le module mod_rewrite d’Apache, et des instructions placées dans un fichier .htaccess
Vérifiez que le module mod_rewrite est bien actif pour votre serveur Apache en
cherchant la ligne suivante danshttpd.conf, sinon ajoutez-la
LoadModule rewrite_module modules/mod_rewrite.so
Ensuite, vous pouvez vous appuyer sur le fichier.htaccess présent dans www Voici
son contenu :
# R´ e´ ecriture des requ^ etes
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css)$
RewriteRule * index.php
Un fichier .htaccess contient des instructions à destination du serveur Apache, propres aux fichiers contenus dans le répertoire courant Ici, on demande à ce que toutes les URL autres que celles référençant des fichiers à transmettre directement au navigateur (images, Javascript, CSS, PDF, etc.) soient redirigées versindex.php Essayez
par exemple d’accéder à l’adresse http://zscope.local/essai.php Si votre configuration
fonctionne, le serveur vous redirigera versindex.php
Cela supprime en grande partie les messages 404 Not Found renvoyés par le serveur quand une URL ne correspond pas à une ressource existante Ce message ne peut plus apparaître que pour les URL non redirigées, comme par exemple un fichier image qui n’existe pas
Si tout va bien, vous devriez cette fois accéder à la page d’accueil et voir l’affichage
de la figure 9.1 Comme vous le voyez, il s’agit du WEBSCOPE, dans un état embryon-naire, puisqu’aucune fonction n’est réalisée Les contrôleurs et actions existants sont
de simples illustrations des composants du ZF
REMARQUE –Si l’application ZS COPE n’est pas à la racine de votre serveur web (par exemple
si vous y accédez avec http://localhost/zscope), vous devez définir le paramètrebase_url dans le fichier application/config.ini (sur le même exemple, le paramètre doit être zscope) Sinon, les images et feuilles de style CSS ne seront pas trouvées.
9.1.3 Organisation et conventions
Maintenant, jetons un coup d’œil à l’ensemble de l’organisation du site, résumée dans
la figure 9.2 Elle suit les règles par défaut du Zend Framework Bien que cela puisse sembler inutilement compliqué de prime abord, il faut se souvenir qu’on cherche
à gérer des applications larges et complexes Le découpage très prononcé en une hiérarchie de répertoires assez profonde a l’avantage de faciliter la localisation des différentes parties d’une application
Trang 4Figure 9.1 — Page d’accueil du ZS COPE
models
css images
index.php
controllers
scripts zscope
application
IndexController.php, InscriptionController.php, Internaute.php, Film.php, Role.php
config.ini
BaseURL.php
index inscription
index.phtml index.phtml, layout.phtml
Figure 9.2 — Organisation (minimale) du code pour une application Zend
Vous pouvez déjà remarquer qu’il s’agit d’une extension de la structuration adop-tée pour notre MVC simplifié utilisé pour la réalisation du WEBSCOPE1 Une
1 Il serait plus juste d’admettre que notre MVC est une simplification radicale du ZF.
Trang 5différence est le répertoire www qui ne contient que les fichiers qui peuvent être référencés par une URL dans un navigateur Tout le reste se trouve dans application.
Comme dans notre MVC, ce dernier contient trois sous-répertoires correspondant respectivement aux contrơleurs, aux modèles et aux vues Il contient également un fichier de configuration,config.ini
Les fichiers des contrơleurs Zend sont nommés Nom Controller, ó Nom
repré-sente le nom du contrơleur, commençant par une majuscule Ici, nous avons les contrơleurs index, inscription, etc., correspondant aux fichiersIndexController.php,
InscriptionController.php, etc Comme dans notre MVC, un contrơleur est une classe
constituée d’actions, méthodes dont le nom se termine par Action Nous y revenons
page 373
Les modèles sont des classes PHP Les classes représentant des données
persis-tantes sont construites selon une mapping objet-relationnel proposé par le ZF qui
permet de naviguer dans la base sans effectuer de requêtes SQL Voir page 379
Enfin, le répertoire views contient les vues Sa structuration est un peu plus compliquée Les fragments de pages HTML sont dans le sous-répertoire scripts, et
on trouve encore un sous-répertoire pour chaque contrơleur Les fichiers de vues ont tendance à proliférer, d’ó une structuration en répertoires Les fichiers ont pour extension.phtml car il s’agit d’un mélange de PHP et de HTML Notez également
dans scripts la présence du fichier layout.phtml, qui contient la mise en forme graphique
du site
Dans ce qui suit, référez-vous au schéma de la figure 9.2 pour retrouver les fichiers décrits
9.1.4 Routage des requêtes dans une application Zend
Une requête HTTP adressée à l’application a le format suivant :
http://zscope.local/ctrl/action[params]
Ici, ctrl et action représentent respectivement le nom du contrơleur et le
nom de l’action, et leur valeur par défaut est index La forme de la requête est
étrange puisqu’on semble faire référence à un sous-répertoire ctrl de la racine du site web, et même à un sous-répertoire action Ces répertoires, comme nous l’avons
vu, n’existent pas, mais le mécanisme de redirection renvoie la requête versindex.php
À ce moment-là un processus de routage implanté par le Zend Framework analyse
la requête et détermine le contrơleur et l’action demandés La méthode implantant
l’action du contrơleur ctrl est alors exécutée.
Si, par exemple, on appelle http://zscope.local/model/simpletbl, la méthode
simpletblAction() du contrơleurModelControllersera exécutée par le scriptindex.php Cette réécriture permet de normaliser l’adressage des fonctionnalités d’une appli-cation Zend Les paramètres passés à un action peuvent l’être soit sous la forme
standard ?nom=valeur, soit à nouveau sous la forme /nom/valeur.