UN EXEMPLE ÉLÉMENTAIRE
D’APPLICATION MVC EN PHP
KRISTEN LE LIBOUX
JUILLET 2013
Introduction
Une liste de choses à faire
Deux pages-types :
• Page d’accueil (liste des choses, cliquables)
• Détails d’une chose (nom,...
Objectif
Concevoir une architecture pour ce site élémentaire
• Générique, réutilisable, extensible
• Avec le modèle de con...
Mockups : liste
5
TODO.COM
copyright...
A faire :
•Ranger les courses
•Faire le ménage
•Dormir
http://localhost/todolist
Mockups : détails
6
TODO.COM
copyright...
Ranger les courses :
A faire avant le
17/01/2013 11:00:00
Retour
http://localhos...
Rappels sur MVC
Modèle MVC
Principe de conception d’applications
basé sur la séparation de 3 fonctions essentielles
en composants distinct...
Modèle MVC en PHP
Modèle :
• Gère les échanges avec la BDD
• Une classe par entité de la BDD
(utilisateur, article, catégo...
Modèle MVC en PHP
Vue :
• Affichages HTML (parfois JSON si Ajax)
• On injecte des parties variables (provenant du
modèle pa...
Modèle MVC en PHP
Contrôleur :
• Implémente les actions
• Autant de classes que nécessaires, regroupées par
entités logiqu...
Modèle MVC en PHP
Noyau (kernel) : le chef d’orchestre
• Analyse la requête du client
• Instancie le contrôleur correspond...
Modèle MVC en PHP
Point d’entrée du site (unique, index.php) :
• Premier script appelé, quelle que soit la requête
• Initi...
Schéma récapitulatif (1/4)
Supposons que le client (internaute) appelle l’URL :
http://localhost/todolist/item/ranger-cour...
index.php?query=item/ranger-courses
point
d’entrée
Kernel::run()
$cont = new ItemController
	

 	

 	

 	

 ("ranger-cours...
Schéma récapitulatif (3/4)
1. Le client requiert une URL http://.../item/ranger-courses
2. Redirection Apache vers index.p...
Schéma récapitulatif (4/4)
3.3.1	

	

 Le noyau analyse la requête (fait appel à un routeur) :
	

 	

 	

 Contrôleur : 	
...
Pourquoi une telle complexité ?
Modularité
• Facilite la coopération de différents développeurs
• Les fichiers HTML sont le...
Architecture des
répertoires
www/
• .htaccess
• index.php
• css, images, js, etc
(aucun ici...)
Répertoires et fichiers à créer
app/
• kernel/
• control...
app/controller/
• IndexController
• ItemController
app/model/
• Item
Classes à créer
app/kernel/
• Kernel
• Controller
• M...
Vues à créer
En général on crée une vue par action.
Ici il y a deux contrôleurs avec action «display»
app/view/
• index/di...
Discussion
Extensions possibles
1. 	

Plusieurs modèles de vues : système de thèmes
2.	

Vues modulables (header, footer, sidebar, et...
Télécharger les sources
25
https://github.com/kleliboux/code-samples
MERCI
@NOVLANGUE SUR TWITTER
COMMENTAIRES, DISCUSSIONS, QUESTIONS
Prochain SlideShare
Chargement dans…5
×

Un exemple élémentaire d'application MVC en PHP

38 867 vues

Publié le

Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.

Publié dans : Technologie
0 commentaire
17 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
38 867
Sur SlideShare
0
Issues des intégrations
0
Intégrations
11
Actions
Partages
0
Téléchargements
1 071
Commentaires
0
J’aime
17
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Un exemple élémentaire d'application MVC en PHP

  1. 1. UN EXEMPLE ÉLÉMENTAIRE D’APPLICATION MVC EN PHP KRISTEN LE LIBOUX JUILLET 2013
  2. 2. Introduction
  3. 3. Une liste de choses à faire Deux pages-types : • Page d’accueil (liste des choses, cliquables) • Détails d’une chose (nom, à faire avant le...) 3
  4. 4. Objectif Concevoir une architecture pour ce site élémentaire • Générique, réutilisable, extensible • Avec le modèle de conception MVC : Modèle -Vue - Contrôleur • Et avec URL rewriting 4
  5. 5. Mockups : liste 5 TODO.COM copyright... A faire : •Ranger les courses •Faire le ménage •Dormir http://localhost/todolist
  6. 6. Mockups : détails 6 TODO.COM copyright... Ranger les courses : A faire avant le 17/01/2013 11:00:00 Retour http://localhost/todolist/item/ranger-courses http://localhost/todolist/item.php?id=1
  7. 7. Rappels sur MVC
  8. 8. Modèle MVC Principe de conception d’applications basé sur la séparation de 3 fonctions essentielles en composants distincts : • Modèle : gérer les données • Vue : gérer l’affichage, l’UI • Contrôleur : agir 8
  9. 9. Modèle MVC en PHP Modèle : • Gère les échanges avec la BDD • Une classe par entité de la BDD (utilisateur, article, catégorie, produit, etc...) • On peut utiliser un ORM (Doctrine, Propel) pour cela 9
  10. 10. Modèle MVC en PHP Vue : • Affichages HTML (parfois JSON si Ajax) • On injecte des parties variables (provenant du modèle par exemple) : détails d’un article, d’un produit, etc • On peut utiliser un moteur de templates (Smarty,Twig) 10
  11. 11. Modèle MVC en PHP Contrôleur : • Implémente les actions • Autant de classes que nécessaires, regroupées par entités logiques (Articles, Utilisateurs, Produits, Commande, etc...) • Et aussi pour les erreurs (404, 403...) • Chaque contrôleur a ses actions (lister, afficher, insérer, éditer, supprimer, etc) • Chaque contrôleur a ses vues associées 11
  12. 12. Modèle MVC en PHP Noyau (kernel) : le chef d’orchestre • Analyse la requête du client • Instancie le contrôleur correspondant • Exécute l’action • Affiche la vue, etc. 12
  13. 13. Modèle MVC en PHP Point d’entrée du site (unique, index.php) : • Premier script appelé, quelle que soit la requête • Initialise la configuration • Appelle le noyau Impose de configurer Apache, URL rewriting 13
  14. 14. Schéma récapitulatif (1/4) Supposons que le client (internaute) appelle l’URL : http://localhost/todolist/item/ranger-courses • Il s’agit de l’URL de la page « détails de l’élément "Ranger les courses" » • Observons le processus côté serveur. 14
  15. 15. index.php?query=item/ranger-courses point d’entrée Kernel::run() $cont = new ItemController ("ranger-courses"); $cont->display(); noyau contrôleur et action modèle Item::find("ranger-courses"); $view = newView("item-details.html"); echo $view->render();vue clienthttp://localhost/todolist/item/ranger-courses réécriture
  16. 16. Schéma récapitulatif (3/4) 1. Le client requiert une URL http://.../item/ranger-courses 2. Redirection Apache vers index.php?query=item/ranger-courses 3. Exécution de index.php (point d’entrée unique) : 3.1. Initialisation de la configuration (ROOT, HOME) 3.2. Inclusion de «kernel.php» (classe statique) 3.3. Exécution du noyau avec Kernel::run() 16
  17. 17. Schéma récapitulatif (4/4) 3.3.1 Le noyau analyse la requête (fait appel à un routeur) : Contrôleur : ItemController Action : display Paramètres : slug = "ranger-courses" 3.3.2 Le noyau instancie ce contrôleur, lui passe les paramètres et exécute l’action : - Instanciation du modèle nécessaire (Item) - Recherche de l’élément correspondant au slug - Génération de la vue et envoi au client 17
  18. 18. Pourquoi une telle complexité ? Modularité • Facilite la coopération de différents développeurs • Les fichiers HTML sont le moins modifiés possible par rapport aux livraisons de l’intégrateur Fiabilité et maintenabilité • Chaque classe fait peu de choses, mais le fait parfaitement • Ou sinon, c’est facile de localiser les erreurs • Le code est factorisé, jamais dupliqué Extensibilité • Ajouter une action ou une fonctionnalité entière est facile 18
  19. 19. Architecture des répertoires
  20. 20. www/ • .htaccess • index.php • css, images, js, etc (aucun ici...) Répertoires et fichiers à créer app/ • kernel/ • controller/ • model/ • view/ 20
  21. 21. app/controller/ • IndexController • ItemController app/model/ • Item Classes à créer app/kernel/ • Kernel • Controller • Model • View • Router • Database 21
  22. 22. Vues à créer En général on crée une vue par action. Ici il y a deux contrôleurs avec action «display» app/view/ • index/display.html • item/display.html • error/404.html 22
  23. 23. Discussion
  24. 24. Extensions possibles 1. Plusieurs modèles de vues : système de thèmes 2. Vues modulables (header, footer, sidebar, etc) 3. Présence d’un back- et d’un front-office : Il faut identifier les éléments communs ou spécifiques 4. Notion de session (droits d’accès) 5. Routeur plus élaboré (expressions régulières, extraction automatisée des paramètres) 6. Gestion des formulaires 24
  25. 25. Télécharger les sources 25 https://github.com/kleliboux/code-samples
  26. 26. MERCI @NOVLANGUE SUR TWITTER COMMENTAIRES, DISCUSSIONS, QUESTIONS

×