Exercice : Controller d'affichage
Étape 0 :
Créez un repository GitHub public avec un README et appelez-le :
coda-bph-j8.Créez un dossier
affichagedans le dossiercoda-bph-j8Récupérez le zip des fichiers du projet ici
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éthodeindexduBlogController.Si
$get['path']existe et contient une chaine de caractères qui contientarticles: appelez la méthodearticleduBlogControllerDans tous les autres cas : appelez la méthode
notFoundduBlogController
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() : voidqui affiche, en utilisant sa méthoderenderle templatebloget lui envoie un tableau vide.public function article() : voidqui affiche, en utilisant sa méthoderenderle templatearticleet lui envoie un tableau vide.public function notFound() : voidqui affiche, en utilisant sa méthoderenderle templatenotFoundet 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 :
É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.
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:
É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 :
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.