Avec les frameworks PHP, pourquoi le concept de «route» est-il utilisé?

31

La raison pour laquelle je pose cette question est parce qu'un script PHP n'est pas un itinéraire? Par exemple, si vous avez un article.php, votre itinéraire est simplement http://mysite.com/article.php .

Pourquoi éloigner davantage le concept d'un itinéraire alors qu'il existe déjà sous la forme d'un simple fichier?

Ryan
la source

Réponses:

44

Pour comprendre ce que fait un routeur, vous devez d'abord comprendre ce qu'est un moteur de réécriture. Extrait de l'article Wikipédia (c'est moi qui souligne):

Un moteur de réécriture est un logiciel qui modifie l'apparence d'une URL Web (réécriture d'URL). Les URL réécrites (parfois appelées URL courtes, fantaisistes ou conviviales pour les moteurs de recherche - SEF) sont utilisées pour fournir des liens plus courts et plus pertinents vers des pages Web. La technique ajoute une certaine séparation entre les fichiers utilisés pour générer une page Web et l'URL qui est présentée au monde .

Lorsqu'un moteur de réécriture est utilisé, vous n'avez pas de corrélation 1: 1 entre l'URL et un script PHP. Un exemple du même article:

http://example.com/wiki/index.php?title=Page_title

peut être réécrit comme:

http://example.com/wiki/Page_title

Il existe divers avantages à utiliser la technique. Étant donné que PHP est généralement étroitement associé à Apache, le moteur de réécriture le plus couramment utilisé est mod_rewrite d'Apache .

Si vous souhaitez réécrire des URL, vous avez besoin d'une sorte de routage, car le routage est le processus consistant à prendre l'URL, à la diviser en composants et à décider quel est le script à appeler. La page de documentation du routeur standard de Zend Framework explique le processus comme suit:

Le routage est le processus consistant à prendre un point de terminaison URI (la partie de l'URI qui vient après l'URL de base) et à le décomposer en paramètres pour déterminer le module, le contrôleur et l'action de ce contrôleur qui doivent recevoir la demande.

De nos jours, la plupart des frameworks PHP sont basés sur le modèle MVC , et sur un framework MVC, le processus ressemble à ceci * :

  1. Le navigateur pointe vers une URL,
  2. Le serveur Web intercepte la demande et la transmet à un point d'entrée commun, généralement un index.phpscript,
  3. index.php obtient l'URL et démarre le processus de routage.
  4. L'URL est décomposée en paramètres, où le premier est le contrôleur, le second est la méthode d'action et les autres sont considérés comme des paramètres dynamiques,
  5. Si une classe de contrôleur correspondant au premier paramètre existe, un objet contrôleur est instancié,
  6. La méthode d'action qui est généralement une fonction de l'objet contrôleur est appelée et son retour est ce qui est réellement retourné au navigateur.

La mise en correspondance des paramètres avec les contrôleurs et les méthodes utilise généralement la mise en correspondance via des expressions régulières pour pouvoir gérer des modèles de routage complexes et dynamiques, appelés routes. De bons exemples de routes peuvent être trouvés sur la page de documentation du routage URI de CodeIgniter :

$ route ['journals'] = "blogs";

$ route ['blog / joe'] = "blogs / utilisateurs / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

Le $routetableau contient les modèles sous forme de clés et les actions résultantes sous forme de valeurs au controller/action_method/dynamic_parameterformat.

* Il ne s'agit pas d'une description du processus canonique, mais simplement d'une explication trop simplifiée.

yannis
la source
15
Il devrait y avoir un badge pour décrire un routeur mvc sans utiliser aucun dérivé de "dispatch" ...
yannis