11. Le Router

Mise en place du router

Commençons par créer une classe  Router.php  dans le dossier  config

<?php

namespace App\config;
use Exception;

class Router
{
    public function run()
    {
        try{
            if(isset($_GET['route']))
            {
                if($_GET['route'] === 'article'){
                    require '../templates/single.php';
                }
                else{
                    echo 'page inconnue';
                }
            }
            else{
                require '../templates/home.php';
            }
        }
        catch (Exception $e)
        {
            echo 'Erreur';
        }
    }
}

On a simplifié le fichier  index.php  qui se limite au code suivant :

<?php

require '../config/dev.php';
require '../vendor/autoload.php';

$router = new \App\config\Router();
$router->run();

L'avantage ici est d'avoir une configuration pour la phase de développement. Vous pouvez aussi créer un fichier prod.php dans le dossier config avec les mêmes constantes contenant vos paramètres de prod.

Quand vous passerez du mode  dev  au mode  prod  , il vous suffira de modifier la ligne dans le fichier  index.php  😃

On a maintenant un fichier  index.php  simplifié, et une classe  Router  qui va s'occuper de gérer toute nos routes.

 Nous allons créer de nouvelles routes dans la partie suivante de ce cours

Accédez à l'URL http://localhost/blog/public/index.php et ... on a tout cassé 😅

 

Cela vient simplement de notre configuration. Étant donné que notre classe Router est dans le fichier config, il faut le déclarer dans le fichier composer.json

{
  "autoload": {
    "psr-4": {
      "App\\config\\":"config/",
      "App\\src\\": "src/"
    }
  }
}
On devra le faire à chaque nouvelle classe créée ? 😒

Non, uniquement si les classes ne sont pas dans le dossier src ou config (si la classe est dans un sous-dossier de ceux-ci, il n'y a rien à faire).

N'oubliez pas de mettre à jour l'autoload de composer en lançant de nouveau la commande :

composer dump-autoload

Actualisez votre page web, tout est bon 😃

 

Eh mais j'y pense, tu nous a parlé de mettre en place une architecture en MVC, mais ce n'est pas encore ça n'est-ce pas ?

Effectivement, on s'y met tout de suite au prochain chapitre.

 

Bilan

Dans ce chapitre, nous avons ajouté un Router pour centraliser dans un même fichier l'appel à toutes nos routes. Ce fichier est appelé par le contrôleur frontal, index.php qui intercepte toutes les requêtes.

Vous pouvez retrouver le code associé à ce chapitre sur GitHub.