Une route pas si romaine que ça
Voyons maintenant les routes, tu sais ce qu'est une route n'est ce pas?

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.

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"}

Je te propose JSON, je trouve ce format assez clair et facile à modifier.
JSON n'est pas obligatoirement le format à utiliser, d'autres formats de données peuvent tout à fait convenir aussi, tel que xml ou yaml. C'est à vous de choisir celui qui vous convient le mieux, et il faudra ensuite implémenter la méthode adaptée pour lire le fichier et le transformer en objet.
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"}

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.

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