Backend PHP (BPH) Help

Exercice : Controller d'affichage

Étape 0 :

  1. Créez un repository GitHub public avec un README et appelez-le : coda-bph-j8.

  2. Créez un dossier affichage dans le dossier coda-bph-j8

  3. Récupérez le zip des fichiers du projet ici

  4. Placez-les dans votre dossier affichage

Étape 1 : mettre en place le Router

Étape 1.1 : le .htaccess

Remplissez le .htaccess de façon à pouvoir rediriger toutes les URLs vers l'index.php dans un paramètre path. Inspirez-vous des cnfigurations qui marchaient pour vous pour les exercices d'hier.

Étape 1.2 : la classe Router

Dans le fichier services/Router.php, vous allez créer une classe Router qui n'a pas d'attribut et a une unique méthode publique :

  • public function handleRequest(array $get) : void

Cette méthode vérifiera la valeur de $get['path']:

  • Si $get['path'] est vide ou n'existe pas : appelez la méthode index du BlogController.

  • Si $get['path'] existe et contient une chaine de caractères qui contient articles: appelez la méthode article du BlogController

  • Dans tous les autres cas : appelez la méthode notFound du BlogController

Ajoutez un require du fichier services/Router.php dans le fichier config/autoload.php.

Étape 2 : les Controllers

Étape 2.1 : l'AbstractController

Récupérez le code présenté dans le cours pour créer la classe AbstractController dans le fichier controllers/AbstractController.php.

Ajoutez un require du fichier controllers/AbstractController.php dans le fichier config/autoload.php.

Étape 2.2 : le BlogController

Dans le fichier controllers/BlogController.php créez une classe BlogController qui hérite d' AbstractController.

Cette classe a 3 méthodes publiques :

  • public function index() : void qui affiche, en utilisant sa méthode render le template blog et lui envoie un tableau vide.

  • public function article() : void qui affiche, en utilisant sa méthode render le template article et lui envoie un tableau vide.

  • public function notFound() : void qui affiche, en utilisant sa méthode render le template notFound et lui envoie un tableau vide.

Ajoutez un require du fichier controllers/BlogController.php dans le fichier config/autoload.php.

Étape 3 : le layout

Dans le fichier templates/layout.phtml, placez le code suivant dans les balises PHP :

require "templates/$template.phtml";

Étape 4 : index.php

Dans votre index.php, faites un require de config/autoload.php puis créez une instance de la classe Routeret appelez sa méthode handleRequest en lui passant $_GET.

Étape 5 : affiner le Routeur

Étape 5.1 Coté Router

Notre Router peut pour le moment nous orienter entre la page de liste des articles (la page blog) et la page de détails d'un article (la page articles), mais il ne peut ps faire la différence entre un article et un autre.

Nous allons donc affiner un peu son comportement.

L'URL que nous allons utiliser pour afficher un article précis aura un format de type "/article/3" où 3 serait le numéro de l'article.

Notre $get['path'] contiendra donc /article/3 nous avons besoin de récupérer le 3.

$url = explode("/", $get['path']); $article = $url[2];

Une fois cette manipulation effectuée vote variable $article contient le numéro de l'article. Envoyez la variable $article à la méthode article de votre BlogController.

Étape 5.2 : côté Controller

Dans votre BlogController, modifiez la méthode article pour qu'elle reçoivent à présent un paramètre $id:

public function article(int $id) : void { $this->render("article", []); }

Étape 6 : Préparer les données dans le controller

Étape 6.1 : require les données

Dans les méthodes index et article de votre BlogController, faites un require du fichier data/data-articles.php.

Étape 6.2 : les données du blog

Dans la méthode index de votre BlogController, utilisez le second paramètre de la méthode render pour envoyer le tableau $articles à votre template blog.

Étape 6.3 : les données d'un article

Dans la méthode article de votre BlogController, utilisez le second paramètre de la méthode render pour envoyer le tableau $articles[$id] à votre template article.

Étape 7 : dynamiser les templates

En utilisant les données que vos templates reçoivent dans le tableau $data vous allez devoir faire en sorte de dynamiser les contenus de vos templates.

Étape 7.1 : template du blog

Vider le code présent dans le <ul> du template.

Pour chaque article vous allez devoir générer le code suivant :

<li> <article> <header> <h2> Titre de l'article </h2> </header> <section> <p> Résumé de l'article </p> </section> <footer> <a href="/articles/id">Lire l'article complet</a> </footer> </article> </li>

Dans le href, remplacez id par la clé de l'article dans le tableau.

Étape 7.2 : template d'un article

Dans le template article.phtml faites en sorte d'afficher le titre de l'article puis son contenu.

02 December 2025