Exercice : Routeur MVC
Étape 0 : GitHub
Créez un repository GitHub public avec un README et appelez-le : bre04-routeur-mvc. Clonez le dans le dossier sites/php de votre IDE.
Étape 1 : Créer les fichiers
Dans le dossier de votre projet, recréez l'architecture de dossiers suivante :
Étape 2 : le Routeur
Dans le fichier config/Router.php vous allez créer une classe Router.
Cette classe n'a pas d'attributs, son constructeur n'initialise rien, mais elle a par contre une méthode publique : handleRequest(array $get) : void.
Dans cette méthode handleRequest vous allez créer des conditions :
Si
$get["route"]existe et vaut"a-propos".Si
$get["route"]n'existe pas.Dans tous les autres cas.
Pour l'instant, laissez du vide entre les accolades de ces conditions, nous allons les remplir plus tard.
Étape 3 : Le controlleur
Créez un fichier controllers/PageController.php dans lequel vous allez créer une classe PageController.
PageController n'a pas d'attributs, mais a 3 méthodes publiques :
home() : voidabout() : voidnotFound() : void
home()
Définit une variable $route et lui donne la valeur "home" puis require le fichier templates/layout.phtml.
about()
Définit une variable $route et lui donne la valeur "about" puis require le fichier templates/layout.phtml.
notFound()
Définit une variable $route et lui donne la valeur "notFound" puis require le fichier templates/layout.phtml.
Étape 4 : compléter le Router
Vous allez maintenant compléter les conditions de votre Router pour faire que :
Si
$get["route"]vauta-propos: vous créez une instance duPageControlleret appelez sa méthodeaboutSi
$get["route"]n'existe pas : : vous créez une instance duPageControlleret appelez sa méthodehomeDans tous les autres cas : vous créez une instance du
PageControlleret appelez sa méthodenotFound
Étape 5 : les templates
layout.phtml
Voici le contenu de base de layout.phtml:
Dans les balises PHP faites en sorte que :
si
$routevauthome: require le fichiertemplates/home.phtmlsi
$routevautabout: require le fichiertemplates/about.phtmlsi
$routevautnotFound: require le fichiertemplates/notFound.phtml
home.phtml
Vous allez devoir créer un nouveau fichier templates/home.phtml avec le contenu suivant :
about.phtml
Vous allez devoir créer un nouveau fichier templates/about.phtml avec le contenu suivant :
notFound.phtml
Vous allez devoir créer un nouveau fichier templates/notFound.phtml avec le contenu suivant :
contact.phtml
Vous allez devoir créer un nouveau fichier templates/contact.phtml avec le contenu suivant :
Étape 6 : l'autoload
Dans votre fichier config/autoload.php, faites un require de votre PageController et de votre Router.
Étape 7 : l'index
Dans votre fichier index.php, faites un require de votre config/autoload.php, instanciez un Router et passez la superglobale $_GET à la méthode handleRequest du routeur.
Étape 8 : une nouvelle route
Maintenant à vous de jouer : créez une nouvelle route, qui si l'URL demandée est index.php?route=contact affichera la page de contact.