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

Kristen Le Liboux
Kristen Le LibouxSoftware Engineer en FASTBOOKING
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
1 de 26

Recomendados

Examen principal- php - correction por
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
10.1K vistas10 diapositivas
Tp1 - WS avec JAXWS por
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
6.3K vistas10 diapositivas
Fascicule de tp atelier développement web por
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
2.6K vistas61 diapositivas
Administration des base de donnees sous oracle 10g por
Administration des base de donnees sous oracle 10g Administration des base de donnees sous oracle 10g
Administration des base de donnees sous oracle 10g noble Bajoli
2.6K vistas114 diapositivas
Sécurité des Applications Web avec Json Web Token (JWT) por
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)ENSET, Université Hassan II Casablanca
58.8K vistas119 diapositivas
Cours php por
Cours php Cours php
Cours php Yassine Badri
1.5K vistas31 diapositivas

Más contenido relacionado

La actualidad más candente

Mini projet individuel php por
Mini projet individuel phpMini projet individuel php
Mini projet individuel phpKhadim Mbacké
21.1K vistas16 diapositivas
Php 2 - Approfondissement MySQL, PDO et MVC por
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
3.9K vistas79 diapositivas
Support NodeJS avec TypeScript Express MongoDB por
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBENSET, Université Hassan II Casablanca
19.1K vistas55 diapositivas
Les Contraintes | SQL Oracle por
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
5.3K vistas25 diapositivas
Support de cours Spring M.youssfi por
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfiENSET, Université Hassan II Casablanca
97.8K vistas164 diapositivas
Développement d'un site web jee de e commerce basé sur spring (m.youssfi) por
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
46.8K vistas109 diapositivas

La actualidad más candente(20)

Mini projet individuel php por Khadim Mbacké
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
Khadim Mbacké21.1K vistas
Php 2 - Approfondissement MySQL, PDO et MVC por Pierre Faure
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure3.9K vistas
Les Contraintes | SQL Oracle por webreaker
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
webreaker5.3K vistas
Cours php & Mysql - 1ére partie por kadzaki
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki5.2K vistas
Chp1 - Introduction aux méthodologies de Conception por Lilia Sfaxi
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
Lilia Sfaxi19.7K vistas
Architectures distribuées por Franck SIMON
Architectures distribuéesArchitectures distribuées
Architectures distribuées
Franck SIMON10K vistas
Tp2 - WS avec JAXRS por Lilia Sfaxi
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
Lilia Sfaxi4.1K vistas
diagramme de séquence UML por Amir Souissi
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
Amir Souissi21.4K vistas
Intégration des données avec Talend ETL por Lilia Sfaxi
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
Lilia Sfaxi23.2K vistas
Telecharger Exercices corrigés PL/SQL por webreaker
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
webreaker19K vistas
exercices business intelligence por Yassine Badri
exercices business intelligence exercices business intelligence
exercices business intelligence
Yassine Badri28.6K vistas

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

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter por
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
248 vistas35 diapositivas
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon) por
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon
523 vistas34 diapositivas
ASP.NET MVC, Web API & KnockoutJS por
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
5.7K vistas51 diapositivas
Drupal7 - Bonnes Pratiques (Partie 1) por
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
1.9K vistas54 diapositivas
Rails 3 au Djangocong por
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au DjangocongJérémy Lecour
763 vistas18 diapositivas
Play Framework por
Play FrameworkPlay Framework
Play FrameworkArmaklan
1.3K vistas26 diapositivas

Similar a Un exemple élémentaire d'application MVC en PHP(20)

Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon) por Café Numérique Arlon
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)
ASP.NET MVC, Web API & KnockoutJS por Renaud Dumont
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
Renaud Dumont5.7K vistas
Drupal7 - Bonnes Pratiques (Partie 1) por Alexandre Marie
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
Alexandre Marie1.9K vistas
Play Framework por Armaklan
Play FrameworkPlay Framework
Play Framework
Armaklan1.3K vistas
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours por Horacio Gonzalez
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Horacio Gonzalez754 vistas
Cours yeoman backbone box2d por hugomallet
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
hugomallet1.1K vistas
Meetup python-bottle-telosys-2018-lgu-v1.0 por Laurent Guérin
Meetup python-bottle-telosys-2018-lgu-v1.0Meetup python-bottle-telosys-2018-lgu-v1.0
Meetup python-bottle-telosys-2018-lgu-v1.0
Laurent Guérin520 vistas
Asp.net Présentation de L'application "Organizer" por Nazih Heni
Asp.net Présentation de L'application "Organizer"Asp.net Présentation de L'application "Organizer"
Asp.net Présentation de L'application "Organizer"
Nazih Heni2.7K vistas
03 - [ASP.NET Core] Services RESTful et SPA por Cellenza
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA
Cellenza352 vistas
Introduction à Symfony2 por Hugo Hamon
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
Hugo Hamon15.2K vistas
Utilisation optimale et professionnelle de PHP por Jean-Marc Fontaine
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
Jean-Marc Fontaine1.9K vistas
Nuxt.js et les applications isomorphiques (Universelles/SSR) por Joffrey LEVEUGLE
Nuxt.js et les applications isomorphiques (Universelles/SSR)Nuxt.js et les applications isomorphiques (Universelles/SSR)
Nuxt.js et les applications isomorphiques (Universelles/SSR)
Joffrey LEVEUGLE603 vistas
[Webinar] Techniques avancées de création de workflow - FR por Nuxeo
[Webinar] Techniques avancées de création de workflow - FR[Webinar] Techniques avancées de création de workflow - FR
[Webinar] Techniques avancées de création de workflow - FR
Nuxeo1.7K vistas
Asp.net Tutorials de L'application "Organizer" por Nazih Heni
Asp.net Tutorials de L'application "Organizer"Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"
Nazih Heni7.6K vistas
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher por Normandie Web Xperts
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo LarcherConférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Normandie Web Xperts1.3K vistas
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70... por Alphorm
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...
Alphorm45.5K vistas

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