Session BRE05 Help

CRUD MVC

Étape 0 : les fichiers et la base de données

Architecture des dossiers et fichiers

- assets - styles - css - scss - js - config - Router.php - autoload.php - controllers - UserController.php - models - User.php - managers - AbstractManager.php - UserManager.php - templates - layout.phtml - users - list.phtml - show.phtml - create.phtml - update.phtml - index.php

La base de données

Créez une base de données prenomnom_soutien_crud_mvc en utf8_general_ci.

Dedans, vous allez créer une table users:

  • id qui est un int autoincrémenté

  • email qui est un varchar de longueur 255

  • first_name qui est un varchar de longueur 255

  • last_name qui est un varchar de longueur 255

Étape 1 : Mise en place du Routeur

Voici la liste des routes et des méthodes correspondantes :

  • index.php?route=show_user-> la méthode show() du UserController

  • index.php?route=create_user-> la méthode create() du UserController

  • index.php?route=check_create_user-> la méthode checkCreate() du UserController

  • index.php?route=update_user-> la méthode update() du UserController

  • index.php?route=check_update_user-> la méthode checkUpdate() du UserController

  • index.php?route=delete_user-> la méthode delete() du UserController

  • Dans tous les autres cas : la méthode list() du UserController

Pour le moment, vous n'avez pas de controller, du coup dans les accolades de vos conditions, notez simplement en commentaire le nom de controller et de la méthode qui devra être appelée.

En observant la liste des templates que vous avez dû créer à l'étape 0 et en la comparant avec la liste des méthodes du UserController mentionnées ci-dessus, déduisez quelle méthode devra afficher quel template.

Préremplissez vos templates avec le strict minimum, la structure de base d'une page pour le layout avec le require du template contenu dans la variable $route et un titre décrivant le nom de la page pour les autres.

Il y a plus de méthodes que de templates, que pouvez-vous en déduire ?

Étape 2 : Création du UserController

Grâce aux déductions de l'étape précédente, vous allez pouvoir mettre en place le squelette de votre UserController, créez donc la classe et ses méthodes. Pour les méthodes dont vous avez déduit ce qu'elles doivent afficher, préparez la variable $route et faites un require du layout.

Une fois que c'est fait, vérifiez que vos routes affichent bien le bon template. Comment pourriez-vous vous simplifier ces tests ?

Étape 3 : Schéma de la route create_user

Dans cette étape, je vais vous demander de me décrire de ce qui se passe lorsque vous appelez l'URL index.php?route=create_user. Vous pouvez vous inspirer du schéma de fonctionnement du MVC présent dans le cours.

Clientindex.phpRouter.phpUserControllerUserManagerBase de donnéeslayout.phtmlcreate.phtmlGET index.php?route=create_userAppel le router pour vérifier la routecreate()require "layout.phtml"requireAffichage du formulaire HTML

Étape 4 : Création du modèle User

Nous avons maintenant un squelette de Controller et un schéma du fonctionnement de la route create_user, nous allons donc tenter d'aller plus loin dans la mise en place de cette route.

Nous allons commencer par créer le modèle qui permet de représenter la table users de notre base de données.

Dans le fichier models/User.php créez une classe User qui correspond à la table users de votre base de données.

Étape 5 : Gestion de la connexion à la BDD

Dans cette étape, nous allons gérer la connexion à votre base de données.

Dans le fichier managers/AbstractManager.php, vous allez créer une classe abstraite AbstractManager, elle n'a qu'un seul attribut protected, appelé $db, qui est une instance de la classe PDO (fournie par PHP, rien à require).

Le constructeur de la classe ne prend pas de paramètres, par contre, il initialise son attribut $db avec les informations de connexion à votre base de données.

Étape 6 : Gestion des interactions avec la BDD

Dans cette étape, nous allons gérer les interactions avec votre base de données. Vous pouvez vous inspirer des différents exercices réalisés pendant le module POO (userbase en POO, blog en POO) et de ce que vous aviez appris sur les requêtes avec PDO.

Dans le fichier managers/UserManager.php, créez une classe UserManager qui hérite de la classe AbstractManager.

Elle n'a pas d'attributs et son constructeur ne fait rien à part appeler le constructeur de sa classe parente.

Elle contient par contre les méthodes publiques nécessaires pour un Manager.

Implémentez ces méthodes en adaptant la situation à la classe User et à la table users de votre base de données.

Étape 7 : Relation entre UserManager et UserController

Maintenant que vous avez mis en place les méthodes de votre UserManager, je vais vous demander de deviner quelle méthode du UserManager sera appelée dans quelle méthode du UserController.

Clientindex.php (& Router)UserControllerUserManagerRead?route=listlist()findAll()Retourne un tableau de tous les UserAffiche la liste des User?route=show_usershow()findOne(id)Retourne le User recherchéAffiche les infos du UserCreate?route=create_usercreate()Affiche le formulaire de création de User?route=check_create_usercheckCreate()create(User $user)Redirection vers la route show_userUpdate?route=update_userupdate()findOne(id)Retourne le User recherché pour remplir le formulaireAffiche le formulaire de création de User?route=check_update_usercheckUpdate()update(User $user)Redirection vers la route show_userDelete?route=delete_userdelete()delete(id)Redirection vers la route list

Étape 8 : Intégration du formulaire

Maintenant que vous savez qui va appeler qui, nous allons revenir à notre route create_user que nous avions un peu laissée de côté à l'étape 4 pour aller implémenter des choses dont nous aurions besoin.

La route create_user qui correspond donc à la méthode create() du UserController est une route assez simple à gérer, en effet, elle ne génère pas de logique et se contente d'afficher un template.

Commençons par remplir le template qu'elle appelle : templates/users/create.phtml. Ce template va devoir contenir le formulaire qui permet de saisir les informations d'un nouvel utilisateur. Créez ce formulaire HTML dans le template.

Comme tous les formulaires en PHP, il a besoin d'une action et d'une method, la méthode, ça ne change pas : c'est post. Mais à votre avis, laquelle de nos routes sera son action? Mettez-la en place.

Étape 9 : Implémentation de la route de création d'utilisateur

Maintenant que vous savez que votre formulaire de création d'utilisateur va appeler la route check_create_user nous allons nous occuper d'elle.

Elle a principalement 3 choses à faire :

  1. Récupérer les données du formulaire pour hydrater une instance de la classe User

  2. Instancier un UserManageret transmettre l'instance fraichement créée à sa méthode create()

  3. Rediriger vers la page de liste des utilisateurs

Implémentez ces trois comportements puis tester le fonctionnement de votre création d'utilisateur (en vérifiant s'il apparait dans votre base de données).

Étape 10 : Schéma de la route check_create_user

Dans cette étape, je vais vous demander je vais vous demander de me décrire de ce qui se passe lorsque vous appelez l'URL index.php?route=create_user et que vous soumettez le formulaire (avec des données valides).

Clientindex.phpRouter.phpUserControllerBase de donnéesPOST index.php?route=check_create_userVérifie la route "check_create_user"checkCreate()new User($_POST)Usercreate(User $user)UserManagerINSERT INTO users (email, ...)returnreturnRedirection vers listeAffichage de la liste (nouvelle requête)

Étape 11 : Brainstorming

Maintenant que vous avez vu le processus complet pour la création d'un User, vous allez devoir rédiger vos propres consignes pour le processus d'affichage de la liste des utilisateurs.

  1. Faire l'intégration statique du tableau html dans le template /user/list.phtml

  2. Dans le UserController, dans la méthode list() appeler la méthode findAll() du UserManager.

  3. Dans le UserController, stocker le résultat du findAll() dans une variable.

  4. Dans le UserController, appel à render() pour afficher la page de liste des utilisateurs (en lui passant dans les data le retour de findAll()).

  5. Faire la dynamisation de la Vue dans le template /user/list.phtml

Étape 12 : Affichage de la liste des utilisateurs

Implémentez les consignes que vous avez rédigées à l'étape 11.

Étape 13 : Brainstorming 2 : le retour

Pour pouvoir implémenter les routes qui nous permettent d'afficher le détail d'un utilisateur, de le modifier ou de le supprimer, nous allons devoir ajouter un comportement supplémentaire à nos URLs. Essayez de deviner l'information qui pourrait nous manquer.

23 March 2026