Voici un petit site internet de 4 pages.
Actuellement, il est composé de 4 fichiers HTML statiques.
On va améliorer ce site et rendre le tout dynamique, tout en suivant une structuration objet plus professionnelle, plus maintenable et plus scalable.
- déplacer les fichiers HTML dans un sous-répertoire views
- renommer ces fichiers HTML en fichiers PHP
- créer les 4 fichiers "point d'entrée" PHP à la racine du projet :
- index.php
- products.php
- store.php
- about.php
- dans chacun de ces fichiers, inclure le fichier de vue correspondant
include(__DIR__.'/views/index.tpl.php'); // pour la home
view
outemplate
, même combat 💪 🎨 💄- factoriser le code HTML répété dans les fichiers de vues
- créer une vue
header.tpl.php
dans views - créer une vue
footer.tpl.php
dans views
- créer une vue
- modifier les fichiers "point d'entrée" pour inclure ces vues
header.tpl.php
etfooter.tpl.php
- créer une classe
MainController
dans le sous-répertoirecontrollers
- déclarer 4 méthodes vides dans ce
MainController
:home
(correspondant à la pageindex.php
)about
(correspondant à la pageabout.php
)products
(correspondant à la pageproducts.php
)store
(correspondant à la pagestore.php
)
- déclarer la méthode
show
dansMainController
qui va s'occuper d'inclure les viewspublic function show($viewName, $viewVars=array()) { // $viewVars est disponible dans chaque fichier de vue include(__DIR__.'/../views/header.tpl.php'); include(__DIR__.'/../views/'.$viewName.'.tpl.php'); include(__DIR__.'/../views/footer.tpl.php'); }
- dans le corps des 4 méthodes vides, appeler la méthode
show
sur l'objet courant ($this
) en précisant en paramètre quelle views vous souhaitezpublic function home() { // Délègue l'affichage à la méthode "show" du MainController $this->show('home'); }
- modifier chaque fichier "point d'entrée"
- retirer l'inclusion existante (views)
- inclure la classe
MainController
- instancier un objet
MainController
- appeler la méthode de l'objet
MainController
correspondant au point d'entrée<?php // File index.php // Instanciation de la classe MainController $controller = new MainController(); // Appel de la méthode correspondant à ce point d'entrée (page) $controller->home();
point d'entrée
>méthode du controller
>views
> 👌
Intégrer notre classe de template Templator
🤓
-
Templator
est un système de gestion des templates permettant de faire mieux que de simplesinclude
de views -
rechercher à quel endroit du code actuel nous incluons les views
-
remplacer ces
include
ourequire
par l'utilisation de la classeTemplator
- instancier l'objet
- définir les "variables" pour les views (fournies en paramètre)
- appeler la méthode
display()
Indice "endroit du code"
Inclure les views ou templates, c'est afficher/générer le code HTML
Une seule méthode s'occupe de la partie affichage 😉Spoiler "endroit du code"
méthode
show
duMainController
Spoiler réponse
public function show($viewName, $viewVars=array()) { // Instanciation de l'objet Templator $templateEngine = new Templator(__DIR__.'/../views/'); // Définition des "variables" pour les _views_ foreach ($viewVars as $varName=>$varValue) { $templateEngine->addData($varName, $varValue); } // Penser à modifier les variables dans les templates ($this->getVar()) $templateEngine->display($viewName); }
Job's done ! 💪 🎉 🍾
Se féliciter, relire la structure de nos fichiers et se représenter le parcours du script PHP dans nos fichiers pour afficher une page HTML