Backend PHP (BPH) Help

Afficher ses pages avec un Controller

Les controllers, comme nous l'avons dit hier, sont responsables de la logie métier au sein de votre site. Parmi les grands axes possibles parmi la logique métier, nous allons approfondir trois d'entre eux aujourd'hui :

  • la préparation des données pour l'affichage

  • le traitement des formulaires

  • les interactions avec les services

Les Controllers et l'affichage

Le Controller a pour rôle de centraliser les données à présenter sur une page, éventuellement de les formater si nécessaire, puis d'appeler le template "layout" en lui indiquant quel template et quelles données afficher.

Ces données peuvent être en dur, venir d'un fichier, d'une API ou d'une base de données.

Nous verrons les Models et Managers plus tard dans la semaine donc pour aujourd'hui, nos données proviendront de fichiers.

L'AbstractController

Tous nos controllers auront au moins deux méthodes en commun :

  • render, la méthode qui prépare le template à afficher et lui transmet les données

  • redirect, la méthode qui permet de rediriger une page en cas de besoin

Comme ces deux méthodes seront présentes pour tous les controllers, nous les plaçons dans une classe abstraite AbstractController dont nos Controllers hériteront.

abstract class AbstractController { protected function render(string $template, array $data) : void { require "templates/layout.phtml"; } protected function redirect(string $route) : void { header("Location: $route"); } }

Le Controller

Nos controllers vont donc tous hériter d'AbstractController, puis préparer des données et template pour l'affichage :

class PageController extends AbstractController { public function index() : void { $pageTitle = "Page d'accueil"; $pageSubtitle = "Bienvenue sur mon site !"; $this->render("home", [ "title" => $pageTitle, "subtitle" => $pageSubtitle ]); } }

Et dans le template pour récupérer les données que je veux afficher, j'utilise le tableau associatif $data qui a été créé au moment de l'appel de la méthode render:

<main> <h1><?= $data["title"] ?></h1> <h2><?= $data["subtitle"] ?></h2> </main>
02 December 2025