Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0
Créez un repository GitHub public avec un README et appelez-le : bre03-routeur-mvc
.
Clonez le dans le dossier sites/php
de votre IDE.
Dans le dossier de votre projet recréez l’architecture de dossiers suivante :
- assets
- styles
- css
- scss
- js
- config
- Router.php
- autoload.php
- controllers
- models
- services
- templates
- layout.phtml
- index.php
💡 Pour que Git conserve votre architecture de dossiers, créez des fichiers vides appellés .gitkeep
dans vos dossiers vides.
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.
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() : void
about() : void
notFound() : void
Définit une variable $route
et lui donne la valeur "home"
puis require le fichier templates/layout.phtml
.
Définit une variable $route
et lui donne la valeur "about"
puis require le fichier templates/layout.phtml
.
Définit une variable $route
et lui donne la valeur "notFound"
puis require le fichier templates/layout.phtml
.
Vous allez maintenant compléter les conditions de votre Router
pour faire que :
$get["route"]
vaut a-propos
: vous créez une instance du PageController
et appelez sa méthode about
$get["route"]
n’existe pas : : vous créez une instance du PageController
et appelez sa méthode home
PageController
et appelez sa méthode notFound
Voici le contenu de base de layout.phtml
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>Exercice Routeur MVC</title>
</head>
<body>
<header>
<nav>
<ul>
<li>
<a href="index.php">Accueil</a>
</li>
<li>
<a href="index.php?route=a-propos">À propos</a>
</li>
</ul>
</nav>
</header>
<?php
// votre code ici
?>
</body>
</html>
Dans les balises PHP faites en sorte que :
$route
vaut home
: require le fichier templates/home.phtml
$route
vaut about
: require le fichier templates/about.phtml
$route
vaut notFound
: require le fichier templates/notFound.phtml
Vous allez devoir créer un nouveau fichier templates/home.phtml
avec le contenu suivant :
<main>
<h1>Page d'accueil</h1>
</main>
Vous allez devoir créer un nouveau fichier templates/about.phtml
avec le contenu suivant :
<main>
<h1>Page à propos</h1>
</main>
Vous allez devoir créer un nouveau fichier templates/notFound.phtml
avec le contenu suivant :
<main>
<h1>404 : Page introuvable</h1>
</main>
Vous allez devoir créer un nouveau fichier templates/contact.phtml
avec le contenu suivant :
<main>
<h1>Page de contact</h1>
</main>
Dans votre fichier config/autoload.php
, faites un require de votre PageController
et de votre Router
.
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.
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.