TP MVC
Objectifs du TP
Objectifs de ce TP : Refactoriser votre implémentation REST d'un CRUD en utilisant le patron architectural MVC.
Arborescences des fichiers
.
├── api.php root-endpoint de votre API REST
├── classes Contient les classes de base (MyObject, DatabasePDO, Request, AutoLoader,...)
│ ├── AutoLoader.class.php
│ ├── DatabasePDO.class.php Objet Singleton pour la connexion à la base
│ ├── Dispatcher.class.php
│ ├── Request.class.php
│ └── Response.class.php
├── config Contient les fichiers de configuration de l'application
│ └── config.php
├── controller Contient les définitions des classes de la couche controleur
│ ├── Controller.class.php
│ ├── DefaultController.class.php
│ └── UsersController.class.php
├── model Contient les définitions des classes de la couche Modèle
│ ├── Model.class.php
│ ├── Role.class.php
│ └── User.class.php
├── README.md
└── sql
├── createDB.sql
├── Role.sql.php
├── sample.sql
└── User.sql.phpapi.php
api.phpLe code complet est :
Autoloader
AutoloaderPHP ne charge pas automatiquement les définitions de classes. Il faut faire un require_once avec le chemin du fichier qui contient la définition d’une classe avant de pouvoir l'utiliser. Nous allons ajouter une classe AutoLoader qui va inclure automatiquement le fichier de définition d’une classe lorsque celle-ci est utilisée.
Compléter le code :
Request
RequestLa classe Request represente les requêtes HTTP. Cet objet Request devra faciliter l'accès aux paramètres de la requête (GET, POST, ...).
Compléter le code :
Response
ResponseLa classe Response sert à faciliter l'envoie de réponse HTTP avec différents codes et contenus. Elle intègre également un mécanisme pour intercepter tous les echos et éventuellement les envoyer plus tard dans la réponse (cf. doc PHP ob_start, ob_get_contents et ob_get_clean).
Dispatcher
DispatcherLe dispatcher courant doit permettre d’aiguiller la requête courante sur le bon contrôleur en fonction des paramètres de la requête. Pour cela, il instancie la classe correspondant au contrôleur courant et passe des paramètres à son contructeur.
Compléter le code :
Controller
ControllerDefaultController
Le contrôleur par défaut retourne une réponse d'erreur.
Tester votre code via l'URL : http://localhost/cdaw/api.php Vous devez obtenir une réponse HTTP contenant le JSON suivant :
UsersController
UsersControllerVoici le code incomplet de UsersController :
Pour compléter le code de la méthode getAllUsers afin qu'une requête GET /api.php/users retourne tous les utilisateurs de la base en JSON, vous devez d'abord :
créer les classes modèles :
Model,Usercréeer la classe
DatabasePDO
DatabasePDO
DatabasePDOModel
ModelCréer une classe Model qui sert à factoriser les éléments communs à tous vos modèles. Par exemple, toutes vos classes de modèle devront communiquer avec la base de donnée. Pour cela, les modèles utiliseront l’unique objet permettant d’accéder à la base de données qui est instance de DatabasePDO.
Implémentation partielle de classe Modèle :
User
UserImplémentation partielle de la classe User :
Exemple de fichier de requêtes pour User dans sql/User.sql.php :
Compléter votre MVC
Compléter le MVC en veillant à implémenter les fonctionnalités dans les bonnes couches (modèle ou controller). Veiller aussi à généraliser au mieux votre code dans les super-classes Model et Controller pour éviter les duplications.
A faire :
GET /api/usersretourne tous les utilisateurs de la base en JSONGET /api/user/1retourne tous les informations de l'utilisateur 1 en JSONPUT /api/user/1avec du JSON en paramètre permet de mettre à jour les informations de l'utilisateur 1 dans la base ...
Last updated
Was this helpful?