H2 - P2019

Développement web

Cours 28 - 2016-03-31

PHP

Routing

En développement back, il s'agit du processus permettant de renvoyer le bon contenu au visiteur selon l'URL demandée

Il y a des centaines de façons de faire. Nous allons en voir une assez facile et robuste.

Ce sera l'occasion d'avoir des URL de la forme voulue

Processus

  • Organiser les fichiers dans des dossiers views pour les pages et partials pour les morceaux (header, footer)
  • Rediriger toutes les requêtes sur index.php quelque soit le chemin sauf s'il s'agit d'un fichier
  • Dans index.php, analyser le chemin pour ensuite faire des includes des bons contenus
  • Si le chemin ne correspond à aucun contenu, renvoyer une page 404

Pour renvoyer dans index.php quelque soit le chemin demandé, nous allons avoir besoin d'un .htaccess

Ce fichier contient des commandes qui seront exécutés par Apache

Sur mac, les fichiers commençant par un . sont cachés

Pour les afficher

  • Ouvrez le terminal
  • Envoyez defaults write com.apple.finder AppleShowAllFiles 1
  • Envoyez killall Finder
  • À la racine de votre site, à côté de index.php, créez un fichier .htaccess
  • Rajoutez-y le contenu suivant

Options +FollowSymLinks
RewriteEngine On
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
RewriteRule ^(.*)$ ./index.php?q=$1
                    

Options +FollowSymLinks
                    

Indique qu'il faut suivre les liens symboliques
(genres de raccourcis)


RewriteEngine On
                    

Active la réécriture d'URL


RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
                    

Rajoute une condition : Ne doit pas être un fichier

Sans ça, les URL de fichiers tels que http://monsite.com/css/style.css ne fonctionneraient pas


RewriteRule ^(.*)$ ./index.php?q=$1
                    

Rajoute une règle de réécriture basée sur une regex :
^(.*)$ devient ./index.php?q=$1

Apache fera toujours pointer sur index.php et rajoutera en GET, dans la variable q, le chemin demandé

Il ne reste plus qu'à analyser $_GET['q'] dans notre index.php (idéalement avec des regex) pour inclure les bons fichiers