SlideShare une entreprise Scribd logo
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, à faire avant le...)
3
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
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://localhost/todolist/item/ranger-courses
http://localhost/todolist/item.php?id=1
Rappels sur MVC
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
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
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
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
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
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
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
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
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
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
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
Architecture des
répertoires
www/
• .htaccess
• index.php
• css, images, js, etc
(aucun ici...)
Répertoires et fichiers à créer
app/
• kernel/
• controller/
• model/
• view/
20
app/controller/
• IndexController
• ItemController
app/model/
• Item
Classes à créer
app/kernel/
• Kernel
• Controller
• Model
• View
• Router
• Database
21
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
Discussion
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
Télécharger les sources
25
https://github.com/kleliboux/code-samples
MERCI
@NOVLANGUE SUR TWITTER
COMMENTAIRES, DISCUSSIONS, QUESTIONS

Contenu connexe

PDF
Support JEE Servlet Jsp MVC M.Youssfi
PDF
Telecharger Exercices corrigés PL/SQL
PDF
JDBC: Gestion des bases de données en Java
PDF
Support JEE Spring Inversion de Controle IOC et Spring MVC
PPTX
Introduction à spring boot
PDF
Support developpement applications mobiles avec ionic v3 et v4
PDF
Application web php5 html5 css3 bootstrap
PDF
Support de cours technologie et application m.youssfi
Support JEE Servlet Jsp MVC M.Youssfi
Telecharger Exercices corrigés PL/SQL
JDBC: Gestion des bases de données en Java
Support JEE Spring Inversion de Controle IOC et Spring MVC
Introduction à spring boot
Support developpement applications mobiles avec ionic v3 et v4
Application web php5 html5 css3 bootstrap
Support de cours technologie et application m.youssfi

Tendances (20)

PDF
PDF
Chapitre 5 classes abstraites et interfaces
PDF
Développement d'un site web de E-Commerce avec PHP (Première Partie)
PDF
Support de cours Spring M.youssfi
PDF
Support POO Java première partie
PDF
Tp1 - WS avec JAXWS
PDF
Support de cours angular
PPTX
Introduction à Laravel
PDF
Cours JavaScript
PDF
Support POO Java Deuxième Partie
PPTX
Architectures orientés services (SOA)
PPTX
Modele mvc
PDF
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
PDF
Fascicule de tp atelier développement web
PDF
Programmation orientée objet : Object, classe et encapsulation
PDF
Cours design pattern m youssfi partie 2 observer
PDF
eServices-Tp1: Web Services
PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
PDF
Cours php & Mysql - 1ére partie
PDF
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Chapitre 5 classes abstraites et interfaces
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Support de cours Spring M.youssfi
Support POO Java première partie
Tp1 - WS avec JAXWS
Support de cours angular
Introduction à Laravel
Cours JavaScript
Support POO Java Deuxième Partie
Architectures orientés services (SOA)
Modele mvc
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Fascicule de tp atelier développement web
Programmation orientée objet : Object, classe et encapsulation
Cours design pattern m youssfi partie 2 observer
eServices-Tp1: Web Services
Support Web Services SOAP et RESTful Mr YOUSSFI
Cours php & Mysql - 1ére partie
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Publicité

Similaire à Un exemple élémentaire d'application MVC en PHP (20)

PDF
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
PPTX
Le Modèle MVC PHP Laravel Le Modèle MVC PHP Laravel
ODP
Introduction à Zend Framework
PDF
7_SitesWebMVC.pdf
PDF
cours.symfony.web2pouringenieurseninformatique
PPTX
Introduction à Symfony
PPTX
CodeIgniter_created_by_amine_oubouisk.pptx
PPTX
Architecture mvc
PDF
repartition global laravel framework debutant
PDF
Mieux Développer en PHP avec Symfony
PPTX
Symfony3 overview
PDF
Etude des Frameworks PHP
PDF
cours-laravel-lpti-dar324-janTEDTF-24.pdf
PPTX
Introduction à Symfony
PPTX
ch3 - Laravel - Les bases de la pres.pptx
PDF
WonderPicture
PDF
Wonder_picture_nguyen_patois_rollot_scala
PDF
ch5 - Le CRUD avec Laravel , aaa aaa aaa
PPTX
[2015] Laravel yet another framework
ODP
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Le Modèle MVC PHP Laravel Le Modèle MVC PHP Laravel
Introduction à Zend Framework
7_SitesWebMVC.pdf
cours.symfony.web2pouringenieurseninformatique
Introduction à Symfony
CodeIgniter_created_by_amine_oubouisk.pptx
Architecture mvc
repartition global laravel framework debutant
Mieux Développer en PHP avec Symfony
Symfony3 overview
Etude des Frameworks PHP
cours-laravel-lpti-dar324-janTEDTF-24.pdf
Introduction à Symfony
ch3 - Laravel - Les bases de la pres.pptx
WonderPicture
Wonder_picture_nguyen_patois_rollot_scala
ch5 - Le CRUD avec Laravel , aaa aaa aaa
[2015] Laravel yet another framework
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Publicité

Dernier (7)

PDF
Modems expliqués- votre passerelle vers Internet.pdf
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
PPTX
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
PDF
presentation_with_intro_compressee IEEE EPS France
PDF
FORMATION EN Programmation En Langage C.pdf
Modems expliqués- votre passerelle vers Internet.pdf
Presentation_Securite_Reseaux_Bac+2.pptx
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
Tendances tech 2025 - SFEIR & WENVISION.pdf
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
presentation_with_intro_compressee IEEE EPS France
FORMATION EN Programmation En Langage C.pdf

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

  • 1. UN EXEMPLE ÉLÉMENTAIRE D’APPLICATION MVC EN PHP KRISTEN LE LIBOUX JUILLET 2013
  • 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. 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. Mockups : liste 5 TODO.COM copyright... A faire : •Ranger les courses •Faire le ménage •Dormir http://localhost/todolist
  • 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 20. www/ • .htaccess • index.php • css, images, js, etc (aucun ici...) Répertoires et fichiers à créer app/ • kernel/ • controller/ • model/ • view/ 20
  • 21. app/controller/ • IndexController • ItemController app/model/ • Item Classes à créer app/kernel/ • Kernel • Controller • Model • View • Router • Database 21
  • 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
  • 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