13.Zend Framework 2 et 3

13.4.Installation en tant que "coeur" d'une application web

13.4.1.Configuration mod_rewrite pour le routage avec Zend Framework 3 et 2

13.4.1.1.Ré-écriture d'URL avec mod_rewrite

Pour pouvoir utiliser Zend Framework 2 ou 3 en tant que framework d'application internet, le serveur web doit être configuré pour que toutes les requêtes qui doivent être traitées par Zend Framework soient redirigées vers un unique script (typiquement index.php à la racine de l'espace publique du serveur web aussi appelé DOCUMENT_ROOT[où?]). Pour cela, il faut mettre en place de la réécriture d'URL, ce qui, avec Apache se fait via l'installation et la configuration du module mod_rewrite. Vous devrez donc au préalable avoir activé le mod_rewrite[comment?].
Pour la configuration de la réécriture, 2 options s'offrent à vous:
  • Configuration manuelle
  • Installation d'un squelette d'application MVC
Nous vous proposons de commencer par installer le squelette d'application MVC proposé par Zend puis en l'analysant élément par élément nous verrons comment on arrive à ce résultat via une installation manuelle.

13.4.1.2.Installation d'un squelette d'application MVC

Comme lors de l'installation de ZF[comment?], nous utiliserons la commande composer. Cette fois, placez vous dans le dossier où vous souhaitez procéder à l'installation et lancer l'instruction /usr/local composer create-project -n -sdev zendframework/skeleton-application. Vous obtiendrez alors un dossier baptisé skeleton-application/. Eventuellement, vous pouvez à la place préciser le chemin et nom du dossier destination en l'ajoutant à la fin de la ligne de commande. Ex: /usr/local composer create-project -n -sdev zendframework/skeleton-application /var/sitesweb/mon_appli_web.
Dans le répertoire d'installation vous retrouvez alors, entre autres:
  • config contenant les fichiers de configuration de l'application
  • data pouvant contenir des données de type cache
  • module contenant le coeur de l'application
  • public l'espace publique du serveur web (le DOCUMENT_ROOT) c'est vers ce dossier que le fichier de configuration apache (sous sites-available//sites-enabled/) doit pointer
  • vendor contenant les bibliothèques utilisées par le serveur web (et embarquées dans le projet) dont notamment Zend Framework
  • init_autoloader.php chargé du chargement (include) des fichiers requis
rem
  • Vous pouvez dès maintenant consulter cette application de démonstration, sans même disposer d'un serveur apache ou autre, en utilisant le serveur intégré à PHP. Pour cela, vous pouvez utiliser le raccourci proposé par ce squelette d'application avec la commande > composer serve (commande à lancer depuis le dossier contenant le fichier composer.json et le dossier public/). Ceci va alors lancer un serveur sur le port 8080 (s'il n'est pas déjà utilisé). Tapez alors dans votre navigateur http://localhost:8081 pour découvrir l'application de test. Si vous souhaitez utiliser un autre port, adaptez la section "script" du fichier composer.json

13.4.1.3.Configuration du module mod_rewrite

Le configuration du module mod_rewrite peut se faire via la présence d'un fichier .htaccess à la racine de l'espace publique (DOCUMENT_ROOT) du site web (ici public/). Ce fichier a pour mission de rediriger l'ensemble des requêtes vers le fichier index.php (en dehors des requêtes pour lesquels il y a effectivement une ressource dans l'espace publique).
RewriteEngine On
# Si le fichier (URL) existe on le retourne
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# Sinon... en envoie la requête au fichier index.php
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
Avec une telle configuration, si on a un fichier public/images/accueil.jpg et que l'on saisit une adresse du type http://monsite/images/accueil.jpg alors le fichier accueil.jpg sera retourné directement (sans impliquer index.php) en revanche si l'on saisit http://monsite/accueil alors que ni le dossier ni le fichier public/accueil n'existent c'est le fichier index.php qui sera appelé afin de traiter la requête. Il pourra alors analyser la demande... i.e. parser l'URL et décider comment agir en conséquence. On parle alors de "routage".
Si vous voulez vous en assurer, vous pouvez modifier temporairement le fichier index.php en ajoutant en tout début de script l'instruction
die('Ouf. le mod_rewrite fonctionne.');
Tapez ensuite, dans votre navigateur, une URL constituée du nom de votre serveur suivi d'un chemin bidon (ex: si votre serveur tourne sur localhost, http://localhost/test_mod_rewrite) si vous voyez effectivement "Ouf. le mod_rewrite fonctionne" c'est que c'est bon. Si à la place vous avez une erreur du type 500 Internal Server Error c'est que vous devez avant toute chose vérifier la configuration de votre serveur et de mod_rewrite (indépendemment de toute problématique liée à Zend Framework).

13.4.2.Conclusion

Maintenant que vous vous êtes assurés que les règles de mod_rewrite fonctionnent et que toutes les requêtes passent par index.php, vous allez pouvoir découvrir comment le routage se gère avec Zend Framework.