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
|
- 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.