web-dev-qa-db-fra.com

Avec les frameworks PHP, pourquoi le concept "route" est-il utilisé?

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?

31
Ryan

Pour comprendre ce que fait un routeur, vous devez d'abord comprendre ce qu'est un moteur de réécriture. De la article Wikipedia (soulignement le mien):

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 un degré de 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 y a divers avantages à utiliser la technique. Puisque PHP est généralement étroitement couplé à 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 du Framework Zend explique le processus comme:

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.

La plupart des frameworks PHP de nos jours sont basés sur le modèle MVC , et sur un framework MVC le processus va quelque chose comme 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.php script,
  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 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 page de documentation de routage d'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 $route tableau contient les modèles sous forme de clés et les actions résultantes sous forme de valeurs dans controller/action_method/dynamic_parameter format.

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

44
yannis