Routage des requêtes de page avec PHP de la bonne manière

J’ai besoin de connaître le terme et les meilleures pratiques pour effectuer la navigation sur site “le bon”? façon, comme vous le faites avec stackoverflow lorsque vous posez une question via l’url:

“http://stackoverflow.com/questions/ask”

Où comme avec ma connaissance de la programmation PHP, je le coderais probablement comme ceci:

“http://stackoverflow.com/index.php?p=questions&act=ask”

J’espère que vous comprenez ce que je veux dire. J’aimerais connaître le terme de cette méthode de navigation de page et de traitement des demandes / réponses et, si possible, les meilleures pratiques, les limites ou tout autre élément à prendre en compte lors de la conception d’une application Web utilisant cette norme / méthode. Je ne sais même pas si tout cela est fait avec PHP ou un backend Web codé en ASP ou Ruby ou ce que vous avez, donc j’ai rempli les balises avec mes suppositions.

Le modèle utilisé par la plupart des frameworks MVC est un contrôleur frontal qui appelle un routeur. Le contrôleur frontal est généralement un index.php dans votre racine Web. Ensuite, toutes les requêtes qui ne sont pas destinées aux fichiers existants (tels que js, css et actifs image) doivent être envoyées à ce contrôleur. En apache, vous pouvez le faire avec mod_rewrite :

 RewriteRule ^index\.php$ - [F] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.php [L,QSA] 

Cependant, la méthode recommandée dans Apache 2.5 est avec FallbackResource :

 FallbackResource index.php 

IIS a des fonctionnalités similaires si c’est ce que vous utilisez.

Dans index.php , vous pouvez accéder à l’URL initialement demandée avec $_SERVER['REQUEST_URI'] . Vous devez inclure votre routeur (qui doit être en dehors de la racine Web) et l’appeler avec l’URI de requête. Exemple:

 require '../router.php'; $router = new Router(); $router->process($_SERVER['HTTP_METHOD'], $_SERVER['REQUEST_URI'], $_GET, $_POST); 

Ensuite, votre routeur peut trouver le contrôleur approprié pour acheminer la demande. Lisez plus sur le framework MVC et étudiez quelques exemples pour mieux comprendre comment d’autres l’ont implémenté.

Ils utilisent probablement la même méthode que vous décrivez (incorporation des variables de navigation) dans l’URL, mais cela se fait “sous le capot”.

Le mécanisme qui vous permet de présenter des URL telles que celle-ci est appelé MOD Rewrite. Il utilise la combinaison des variables de l’URL et des expressions régulières pour représenter l’URL de manière plus conviviale pour l’utilisateur final.

Plus d’informations: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Edit: Bien sûr, cela s’appliquerait au code exécuté sur le serveur Web apache. Il existe probablement des modules similaires pour d’autres serveurs Web tels que IIS.

En outre, mod_rewrite est hors de scope de php. Ce sont plutôt les directives du serveur Apache, qui sont invoquées avant même que PHP intervienne.

Je suis en train de développer un routeur php ciblant des performances extrêmement élevées . vous voudrez probablement jeter un coup d’oeil:

https://github.com/c9s/Pux

Pux est 48x plus rapide que le routeur symfony dans la répartition statique des routes, 31 fois plus rapide dans la dissortingbution des expressions régulières. (avec l’extension pux installée)

Pux essaie de ne pas consumr le temps de calcul pour construire tous les itinéraires de manière dynamic (comme Symfony / Routing). Au lieu de cela, Pux comstack vos routes vers un tableau PHP simple pour la mise en cache, les routes compilées peuvent être chargées à partir du cache très rapidement.

Avec le support PHP Extension Pux, vous pouvez charger et dissortingbuer les routes 1.5 ~ 2x plus rapidement que PHP Pux pur.