Modèle-Vue-Contrôleur. Développement Web 2. Projet 1 Sondages. Organisation générale



Documents pareils
PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

TP JAVASCRIPT OMI4 TP5 SRC

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

PHP et les Bases de données - Généralités

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

SYSTÈMES D INFORMATIONS

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Présentation du Framework BootstrapTwitter

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Guide d interfaçage SSO Connexion des ressources aux plates-formes de type Corrélyce. Sommaire. Titre du document

Devenez un véritable développeur web en 3 mois!

Documentation de conception

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

STID 2ème année : TP Web/PHP

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Sécurité des applications web. Daniel Boteanu

les techniques d'extraction, les formulaires et intégration dans un site WEB

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

HTML/CSS - Travaux Pratiques 2

Play.Rules Return. Contents. October 18, Remerciements 2

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Module BD et sites WEB

DOM - Document Object Model


Rapport de stage Clément MOYSAN

Sécurisation d une application ASP.NET

Django. Framework de développement Web

RÉALISATION D UN SITE DE RENCONTRE

Panel des technologies Web

Serveur d Applications Web : WebObjects

Documentation CAS à destination des éditeurs

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Formulaires et Compteurs

Aspects techniques : guide d interfaçage SSO

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

SUPPORT DE COURS / PHP PARTIE 3

Réalisation d une application de soumission de cours en ligne de l Université Virtuelle de Tunis

Module pour la solution e-commerce Magento

< Atelier 1 /> Démarrer une application web

Programmation Web. Madalina Croitoru IUT Montpellier

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Par KENFACK Patrick MIF30 19 Mai 2009

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

PHP 5.4 Développez un site web dynamique et interactif

Dans l'article précédent, vous avez appris

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

NAMEBAY PRO. votre site de revente de noms de domaine en marque blanche. Documentation technique

Attaques applicatives

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Document Object Model (DOM)

Les frameworks au coeur des applications web

WWSympa, une interface web pour Sympa

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Etude et développement d un moteur de recherche

Mise en place d un serveur Proxy sous Ubuntu / Debian

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Initiation à html et à la création d'un site web

Stockage du fichier dans une table mysql:

Mysql avec EasyPhp. 1 er mars 2006

Guide d implémentation Interface avec la plateforme de paiement

1 ère Université WEB. Courbevoie Samedi 21 octobre Votre site interactif sur internet.

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Gestion du cache dans les applications ASP.NET

BIRT (Business Intelligence and Reporting Tools)

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Séance d ED n 5 : HTML et JavaScript

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

The Book for Symfony 2.1

Etude de la pertinence et de l'intérêt des appliances WAF (IPS web) à l'inria

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Applications orientées données

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Construire une application marketing Facebook sur la plateforme Windows Azure

Evaluation et mise en place d un serveur de messages pour Chamilo 2.0

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Alfstore workflow framework Spécification technique

Mise en oeuvre d un intranet à partir de logiciels Open Source avec intégration des certificats numériques et login unique

PDO : PHP Data Object 1/13

Comment développer et intégrer un module à PhpMyLab?

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

OMGL6 Dossier de Spécifications

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

Attaques de type. Brandon Petty

Manipulation 4 : Application de «Change».

Introduction aux concepts d ez Publish

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Les solutions de paiement CyberMUT (Crédit Mutuel) et CIC. Qui contacter pour commencer la mise en place d une configuration de test?

TD HTML AVEC CORRECTION

Transcription:

PHP Modèle-Vue-Contrôleur Introduction Modèle-Vue-Contrôleur Développement Web 2 Bertrand Estellon Aix-Marseille Université April 1, 2014 Le Modèle-Vue-Contrôleur (MVC) est un méthode de conception utilisée pour organiser l interface homme-machine (IHM) d une application Le modèle : les données de l application Exemple : gestion des interactions avec une base de données La vue : est une interface avec laquelle l utilisateur interagit Elle présente des parties du modèle à l utilisateur et reçoit les actions de l utilisateur Exemple : code HTML/JavaScript présenté aux clients Le controleur : analyse les requêtes des clients, décide les actions à effectuer sur le modèle, et choisit les vues à envoyer aux clients Exemple : analyse des informations passées dans l URL Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 1 / 436 PHP Modèle-Vue-Contrôleur Présentation du projet Projet 1 Sondages Présentation du projet : Les utilisateurs postent des sondages constitués d une question et de plusieurs réponses Une fois le sondage posté, il est accessible aux visiteurs du site qui pourront voter pour une des réponses proposées Les nombres de voix obtenues pour chaque réponse sont comptabilisés et affichés sous la forme d un graphique Tous les visiteurs peuvent chercher parmi les sondages et voter Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 140 / 436 PHP Modèle-Vue-Contrôleur Organisation générale Organisation générale Contrôleur Action Modèle Vue Requête HTTP Crée et exécute Consulte/modifie Crée, initialise et affiche Réponse HTTP Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 141 / 436 Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 142 / 436

PHP Modèle-Vue-Contrôleur Organisation générale Organisation générale Contrôleur Action Modèle Vue Requête HTTP Crée et exécute Consulte/modifie Crée, initialise et affiche Consulte/observe Réponse HTTP Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 143 / 436 PHP Modèle-Vue-Contrôleur Le contrôleur Le contrôleur (indexphp) PHP Modèle-Vue-Contrôleur Le contrôleur Le contrôleur (indexphp) Les fonctions du contrôleur : function getactionbyname($name) { $name = 'Action'; require("actions/$nameincphp"); return new $name(); function getviewbyname($name) { /* Factory */ $name = 'View'; require("views/$nameincphp"); return new $name(); function getaction() { /* Factory */ if (!isset($_request['action'])) $action = 'Default'; else $action = $_REQUEST['action']; $actions = array('default', 'SignUpForm', ); if (!in_array($action, $actions)) $action = 'Default'; return getactionbyname($action); Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 144 / 436 Les actions du projet Exécution du contrôleur : session_start(); $action = getaction(); $action->run(); $view = $action->getview(); $action->getview()->setlogin($action->getsessionlogin()); $view->run(); Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 145 / 436 Les actions : SignUpForm : affichage du formulaire d inscription SignUp : demande d inscription Login : connexion du visiteur Logout : déconnexion du visiteur UpdateUserForm : affichage du formulaire de modification de profil UpdateUser : modification du profil AddSurveyForm : affichage du formulaire d ajout de sondage AddSurvey : ajout d un sondage GetMySurveys : affichage des sondages du visiteur Search : recherche Vote : prise en compte d un vote Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 146 / 436

La classe Action Toutes les actions sont définies en étendant la classe suivante : abstract class Action { private $view; protected $database; public function construct(){ $this->view = null; $this->database = new Database(); protected function setview($view) { $this->view = $view; public function getview() { return $this->view; /* */ Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 147 / 436 Exemple : l action UpdateUser class UpdateUserAction extends Action { private function setupdateuserformview($message) { $this->setview(getviewbyname("updateuserform")); $this->getview()->setmessage($message, "alert-error"); public function run() { if ($this->getsessionlogin()===null) { $this->setmessageview("vous devez être authentifié"); $updatepassword = $_POST['updatePassword']; $updatepassword2 = $_POST['updatePassword2']; if (!isset($updatepassword)!isset($updatepassword2)) { $this->setupdateuserformview("vous devez remplir le formulaire"); /* */ Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 149 / 436 La classe Action Toutes les actions sont définies en étendant la classe suivante : abstract class Action { /* */ public function getsessionlogin() { if (isset($_session['login'])) $login = $_SESSION['login']; else $login = null; return $login; protected function setsessionlogin($login) { $_SESSION['login'] = $login; protected function setmessageview($message, $style="") { $this->setview(getviewbyname("message")); $this->getview()->setmessage($message, $style); abstract public function run(); Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 148 / 436 Exemple : l action UpdateUser class UpdateUserAction extends Action { public function run() { /* */ $res = $this->database->updateuser($this->getsessionlogin(), $updatepassword); if ($res!==true) { $this->setupdateuserformview($res); $this->setmessageview("modification enregistrée", "alert-success"); Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 150 / 436

Le modèle PHP Modèle-Vue-Contrôleur Le modèle Le modèle contient les classes permettant de manipuler les objets métiers du site et de modifier la base de données Aucune fonctionnalité de représentation des données n est fournie par le modèle La classe permettant de représenter un sondage est donnée ci-dessous : class Survey { private $id; private $owner; private $question; private $responses; public function construct($owner, $question) { /**/ public function setid($id) { /**/ public function getid() { /**/ public function getowner() { /**/ public function getquestion() { /**/ public function &getresponses() { /**/ public function setresponses($responses) { /**/ public function addresponse($response) { /**/ public function computepercentages() { /**/ Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 151 / 436 La classe View Le modèle PHP Modèle-Vue-Contrôleur Le modèle Vous avez également une classe représentant une réponse : class Response { private $id; private $survey; private $title; private $count; private $percentage; public function construct($survey, $title, $count = 0) { /**/ public function setid($id) { /**/ public function computepercentage($total) { /**/ public function getid() { /**/ public function getsurvey() { /**/ public function gettitle() { /**/ public function getcount() { /**/ public function getpercentage() { /**/ Les interaction avec la base de données se feront via une instance de classe Dababase (instanciée dans le constructeur de classe Action) Nous détaillerons les fonctionnalités de cette classe plus tard Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 152 / 436 La classe View Les différentes vues du projet sont définies en étendant la classe View : abstract class View { protected $message = ""; protected $style = ""; protected $login = null; public function run() { require("templates/pageincphp"); public function setmessage($message, $style="") { $this->message = $message; $this->style = $style; public function setlogin($login) { $this->login = $login; abstract class View { /* */ private function displayloginform() { require("templates/loginformincphp"); private function displaylogoutform() { require("templates/logoutformincphp"); private function displaycommands() { require("templates/commandsincphp"); private function displaysearchform() { require("templates/searchformincphp"); protected abstract function displaybody(); Les vues définissent la méthode displaybody afin de générer le contenu de la page (en conservant les bordures, le formulaire de connexion, etc) Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 153 / 436 Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 154 / 436

La génération de la page pageincphp Les vues <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>sondages</title> <link rel="stylesheet" type="text/css" href="bootstrapmincss" /> </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> $this->displaysearchform(); if ($this->login===null) $this->displayloginform(); else $this->displaylogoutform(); $this->displaybody(); </body> </html> Les différentes vues du projet : DefaultView : page vide MessageView : affiche un message à l utilisateur SignUpFormView : formulaire d inscription UpdateUserFormView : formulaire de modification de mot de passe AddSurveyFormView : formulaire d ajout de sondage SurveysView : liste de sondages Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 155 / 436 Par exemple, la vue suivante permet d afficher une liste de sondages : class SurveysView extends View { private $surveys; public function displaybody() { if (count($this->surveys)===0) { <div class="container"><br>br><br><br> <div style="text-align:center" class="alert"> Aucun sondage ne correspond à votre demande '; require("templates/surveysincphp"); public function setsurveys($surveys) { $this->surveys = $surveys; Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 157 / 436 Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 156 / 436 La vue précédente inclue le code du fichier surveysincphp : <div class="container"><br><br><br> <div class="span7 offset2"> <ul class="media-list"> foreach ($this->surveys as $survey) { $survey->computepercentages(); require("surveyincphp"); </ul> Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 158 / 436

La vue précédente inclue le code du fichier surveysincphp : <div class="container"><br><br><br> <div class="span7 offset2"> <ul class="media-list"> foreach ($this->surveys as $survey) { $survey->computepercentages(); require("surveyincphp"); </ul> La page surveyincphp doit générer un code HTML de la forme suivante : <li class="media well"> <div class="media-body"> <h4 class="media-heading">question</h4> <div class="fluid-row"> <div class="span2">réponse 1 <div class="span2 progress progress-striped active"> <div class="bar" style="width: 20%"> <span class="span1">(20%)</span> <form class="span1" method="post" action="indexphp?action=vote"> <input type="hidden" name="responseid" value="1"> <input type="submit" style="margin-left:5px" class="span1 btn btn-small btn-danger" value="voter"> </form> <!-- Les autres réponses possibles --> </li> Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 159 / 436 Exemple : déroulement d une inscription Le client demande la page indexphp; Le serveur affiche la vue par défaut (vide); Le client clique sur Inscription; Le navigateur demande indexphp?action=signupform; Le serveur affiche la vue SignUpFormView; L utilisateur remplit le formulaire et l envoie; Le navigateur poste le formulaire vers indexphp?action=signup; Le serveur effectue l inscription si aucune erreur ne s est produite; Le serveur affiche la vue MessageView (avec un message de confirmation) ou SignUpFormView (avec un message d erreur); Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 161 / 436 Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 160 / 436 Framework PHP Il existe des frameworks PHP qui permettent de mettre en place plus facilement le modèle MVC : Zend Symfony CodeIgniter CakePHP Ces frameworks proposent : Organisation (contrôleur/actions/vues); Traitement des données des formulaires; Base de données et persistance; Gestion des tests unitaires; Internationalisation; Systèmes de template Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 162 / 436

Systèmes de template Exemple de template Swig : <!DOCTYPE html> <html> <head> <title>my Webpage</title> </head> <body> <ul id="navigation"> {% for item in navigation % <li><a href="{{ itemhref ">{{ itemcaption </a></li> {% endfor % </ul> <h1>my Webpage</h1> {{ a_variable </body> </html> Bertrand Estellon (AMU) Développement Web 2 April 1, 2014 163 / 436