Commentaires

Une route pas si romaine que ça


Voyons maintenant les routes, tu sais ce qu'est une route n'est ce pas?

Arthur, l'apprenti développeurAh oui, ça a été construis par les romains pour faciliter les trajets, maintenant on s'en sert principalement pour rouler en voiture. Mais je ne vois pas vraiment le rapport...

Effectivement, ce n'est pas vraiment lié. Ici on parle de route pour les éléments qui vont nous indiquer vers où se diriger. En fait chaque requête http devrais correspondre à une et une seule route, et cette route sait quel contrôleur, quelle action appeler et quels paramètres il faut utiliser.

D'autres informations peuvent aussi être précisées dans les routes, comme des restrictions d'accès, ou des outils spécifique du framework qu'il faut utiliser.

La classe Route


On va construire pour commencer une classe route qui définit le format d'une route.

Arthur, l'apprenti développeurOk, donc une classe Route.php avec les propriétés url, controller, action, et params. Et on met tout en private avec des accesseurs.

Pas tout à fait, pour commencer, on va nommer la propriété path, et non par url. Une url c'est le chemin complet avec le protocole et le nom de domaine, nous n'utiliserons que le chemin qui se trouve après le nom de domaine, donc path est plus approprié.D'autre part, les routes seront définies dans un fichier de configuration, puis chargées en objets, mais on ne doit pas permettre de les modifier pour des raisons de sécurité, donc un constructeur, mais pas de setter.

Et je te propose d'ajouter une propriété method, cela nous permettra d'identifier si la requête Http doit être de type GET ou POST par exemple.

{"language":"application/x-httpd-php","content":"<?php\n\tclass Route\n\t{\n\t\tprivate $path;\n\t\tprivate $controller;\n\t\tprivate $action;\n\t\tprivate $method;\n\t\tprivate $param;\n\t\t\n\t\tpublic function __construct($route)\n\t\t{\n\t\t\t$this->path = $route->path;\n\t\t\t$this->controller = $route->controller;\n\t\t\t$this->action = $route->action;\n\t\t\t$this->method = $route->method;\n\t\t\t$this->param = $route->param;\n\t\t}\n\t\t\n\t\tpublic function getPath()\n\t\t{\n\t\t\treturn $this->path;\n\t\t}\n\t\t\n\t\tpublic function getController()\n\t\t{\n\t\t\treturn $this->controller;\n\t\t}\n\t\t\n\t\tpublic function getAction()\n\t\t{\n\t\t\treturn $this->action;\n\t\t}\n\t\t\n\t\tpublic function getMethod()\n\t\t{\n\t\t\treturn $this->method;\n\t\t}\n\t\t\n\t\tpublic function getParam()\n\t\t{\n\t\t\treturn $this->param;\n\t\t}\n\t}","filename":"Route.php"}


Arthur, l'apprenti développeurEt le fichier de configuration, on le fait sous quel format?

Je te propose JSON, je trouve ce format assez clair et facile à modifier.



La configuration des routes


Regarde ce fichier que je te propose, qu'en penses tu?

{"language":"application/json","content":"[{\n\t\"path\" : \"/\",\n\t\"controller\" : \"Home\",\n\t\"action\" : \"Home\",\n\t\"method\" : \"GET\",\n\t\"param\" : []\n},\n{\n\t\"path\" : \"/Login\",\n\t\"controller\" : \"Home\",\n\t\"action\" : \"Login\",\n\t\"method\" : \"GET\",\n\t\"param\" : []\n},\n{\n\t\"path\" : \"/Login\",\n\t\"controller\" : \"Home\",\n\t\"action\" : \"Authenticate\",\n\t\"method\" : \"POST\",\n\t\"param\" : []\n}]","filename":"route.json"}


Arthur, l'apprenti développeurEffectivement ça a l'air assez clair, par contre tu m'as dit qu'une url ne correspond qu'à une et une seule route, mais là il y a deux fois le chemin /Login dans ton fichier, ça ne va pas poser de problèmes.

Non, c'est pour cela que je t'ai fait ajouter la propriété "method", si tu regarde bien, la première route est en GET, elle nous permettra d'afficher une formulaire d'authentification, la deuxième par contre est en POST, donc lorsque l'utilisateur envoie son formulaire pour s'authentifier. Et elle pourront chacune appeler une action qui correspond à un traitement spécifique.

Arthur, l'apprenti développeurAh oui, je comprend mieux maintenant. Mais je ne vois toujours pas comment on va réussir à associer une url à une route.

Et bien nous allons y passer dès maintenant avec le routeur ! J'ai terminé cette partie
Demander de l'assistance