Vous êtes sur la page 1sur 7

Plan

Modèle Vue Contrôleur ! Architecture à 3 niveaux


! Le modèle MVC
! Classes en PHP
! Application MVC en PHP
F.-Y. Villemin, CNAM

Architecture à 3 niveaux Architecture à 3 niveaux


Schéma général environnement 3 niveaux Séparer Modèle et Vue sur le Serveur
Serveur
Applications : 2 parties entourées Client Vue Modèle
OK

etat: 'affich '


page HTML
recup relation
+javascript
serveur envoi affich relation
navigateur HTTP SQL
réseau application
SGBD + form et boutons
modules rempl formulaire
additionnels + choisir fonction
isapi modifier, inserer,
php
supprimer,
quitter

machine client machine etat=


serveur 'modifier' etat= etat=

L!’application ne peut stocker ses variables:


'inserer' ''supprimer
'

-ni chez le client


traitemen traitemen traitemen
t t t
-ni chez le serveur
modifier inserer supprime

3 4
Modèle Vue Contrôleur Cas d'utilisation
! Le patron de conception logicielle "Modèle Vue Contrôleur"
(Model-View-Controller ou MVC) a été créé en 1980 par A. * Obtenir
Categories
Goldberg à Xerox PARC pour le langage Smalltalk-80. Système
* ObtenirArticles
! Le modèle MVC est un modèle de développement d'application * pourCategorie

indépendant du langage utilisé :


*
" Il est recommandé par Sun comme architecture des applications J2EE. Commander
Client Article
" MVC (en version 2) est le fondement du logiciel "Struts" développé par
le groupe Apache – Jakarta (en java). Struts est aujourd'hui le
modèle standard de nombreux ateliers logiciels comme WebSphere 5 *
Autentifier
d'IBM ou Macromédia ColdFusion. Client

5 6

Actions et objets Les classes en PHP 4


Une classe est une collection de variables et de fonctions qui fonctionnent avec ces
Obtenir Category
variables
AchatAction
Categories Object Une classe est définie (en PHP 4) en utilisant la syntaxe suivante :
<?php
Changer ObtenirArticles Item class MaClasse {
CategorieAction pourCategorie Object var $attrib1; // 1er attribut de la classe
var $attrib2; // 2ème attribut de la classe
Commander Commander Achat ...
ArticleAction Article Object function mafonction1 ($param11, $param12, …) {
Client <corps de la fonction>;
}; // 1ère méthode de la classe
LoginAction Autentifier Client function mafonction2 ($param21, $param22, …) {
Client Object
<corps de la fonction>;
}; // 2ème méthode de la classe

Client MVC Cas Business }
Controller d’utilisation Objects ?>
Objects
La variable spéciale $this, (moi-même) désigne l’objet courant
7 8
Constructeur Héritage
Les classes décrivent un type de variable Une classe peut être une extension d’une autre classe
En PHP 4, une classe ne peut hériter que d’une seule autre classe, et
Pour créer une variable du type décrit par la classe (nouvelle l’héritage multiple n’est pas supporté
instance de la classe), il faut utiliser la fonction constructeur, La classe fille hérite alors de toutes les méthodes et attributs de la classe
qui porte le même nom que la classe et qui est appelée mère, mais cette classe fille peut avoir des méthodes et attributs en plus
et les valeurs par défaut des paramètres et les fonction peuvent être
automatiquement par l’opérateur new :
redéfinies
<?php
$mavar1 = new MaClasse; L'héritage se note avec le mot clé extends
$mavar1 -> mafonction1 (val11, val12, …); <?php
class MaClasseFille extends MaClasse {
$mavar2 = new MaClasse;
var $nouvattrib; // nouvel attribut de la classe fille
$mavar2 -> mafonction2 (val21, val22, …); function nouvfonction1 ($nouvparam1, $nouvparam2, …) {
?> <corps de la fonction>;
}; // nouvelle méthode de la classe fille
Les destructeurs sont des fonctions qui sont appelées lorsqu’un }

objet est détruit. Il n’y a pas de destructeurs en PHP ?>

9 10

Opérateur :: Mot réservé parent


L’opérateur :: permet de faire référence aux méthodes et attributs d’une classe de base : le mot réservé parent représente la classe de base (indiqué par extends, dans la
<?php déclaration de classe)
class A {
function example() { Il évite d’appeler la classe de base par son nom :
echo "Je suis la fonction originale A::example().<br>\n"; <?php
} class A {
} function example() {
class B extends A { echo "Je suis A::example() et je fournis une fonctionnalité de base.<br>\n";
function example() { }
echo "Je suis la fonction redéfinie B::example().<br>\n";
}
A::example();
}
class B extends A {
function example() {
}
echo "Je suis B::example() et je fournis une fonctionnalité
// Il n’y a pas d’objets de classe A. L’affichage est :
supplémentaire.<br>\n";
// Je suis la fonction originale A::example().<br>
parent::example();
A::example();
}
// Création d’un objet de la classe B.
}
$b = new B;
// L’affichage est : $b = new B;
// Je suis la fonction redéfinie B::example().<br> // Ce code appele B::example(), qui va appeler A::example().
// Je suis la fonction originale A::example().<br> $b->example();
$b->example(); ?>
?>

11 12
Sérialisation Les fonctions magiques __sleep et __wakeup
La sauvegarde d’objets (et de leur association de classe) ests'appelle la sérialisation :
serialize() s’assure que la classe a une méthode avec le nom
serialize() retourne une chaîne représentant une valeur qui peut être stockée dans les
sessions de PHP, ou une base de données magique __sleep
serialize() sauve toutes les variables d’un objet. Le nom de la classe sera sauvé mais par !La fonction __sleep ferme proprement toute connexion à une base de
les méthodes de cet objet données, valide les requêtes, finalise toutes les actions commencées

unserialize() peut relire cette chaîne pour recréer la valeur originale


Pour permettre à unserialize() de lire un objet, la classe de cet objet doit être définie : unserialize() s’assure de la présence de la fonction magique
un objet $a de la classe A dans une page php1.php __wakeup
la linéarisation avec serialize() donne une chaîne qui fait référence à la classe A, et
contient toutes les valeurs de $a
!La fonction __wakeup rétablit toutes les connexions aux bases de
Pour pouvoir le relire avec la fonction unserialize() dans une page page2.php, il faut données, et recret les variables qui n’ont pas été sauvées
que la définition de la classe A soit présente dans cette deuxième page. Ceci se fait
en sauvant la définition de la classe A dans un fichier séparé, et en l’incluant dans les
deux pages page1.php et page2.php.

13 14

Sauvegarde des sessions Modèle Vue Contrôleur


Si la fonction session_register() est utilisée pour sauver des Une application se décompose en trois parties

objets : Modèle : Il représente les données de l'application


Vue : Elle représente la représentation de ses données
!ces objets seront linéarisés automatiquement avec la fonction Contrôleur : Il contrôle l'activation d'une vue en fonction de critères
serialize() à la fin de chaque script, et de choix
!relus avec unserialize() au début du prochain script ⇒ Il existe de nombreuses de manières d'implanter ce modèle :
• Struts en java/JSP
• Ambivalence, php.MVC, Phrame, Eocene en php
La définition de classe doit être incluse dans toutes les pages
Modèle : classe de traitement
(même si ces classes ne sont pas utilisées dans toutes les
Elle définit toutes les méthodes applicatives
pages)
Vue : classe graphique de représentation
Elle définit la représentation de l'application
Contrôleur : le "dispatcher"
Elle redirige les actions de l'utilisateur sur les classes de traitement
15 16
Modèle Vue Contrôleur Modèle Vue Contrôleur
Contrôleur
Serveur Action ActionObject
Réseau
doGet
Navigateur Contrôleur Modèle doPost
Requête Changement de données
Vue : Forward

Modèle Vue
Vue Demande de données
Réponses Vue
Vue ActionForm Page HTML
Vue

Modèle : classes "ActionForm" dans php.MVC


Elle définit toutes les méthodes applicatives
Modèle MVC2 Vue : classes qui génèrent des pages HTML
Base de Contrôleur : classe "ActionDispatcher" dans php.MVC
données
Elle redirige les actions de l'utilisateur sur les classes de traitement
Action : classe "Action" dans php.MVC ou classes de traitement
Chaque action représente un traitement (et, en principe, un seul)
17 18

Fonctionnement Diagramme de Sequence : ActionForm

Requête SQL ou MàJ Requête get ou post Page HTML


Classe "ActionForm" de
maps redonne le forwards php.MVC
ActionForm Action ActionDispatcher Vue
contrôle à

lit le fichier de configuration (ConfigBindings) et obtient le chemin des tables

Les noms des classes sont celles de php.MVC

19 20
php.MVC Implantation en PHP
Programme principal (=contrôleur)
<?
require ('out.php'); # fonc Vue
require ('trait.php'); # fonc Modèle
Init(..);
eval( ‘!tr_!’ . $etat. ‘!( …);!’) ;
finish(..);
?>

21 22

Implantation en PHP Implantation en PHP


Controleur : Dans formulaire généré :
switch ($etat) { <input type=hidden name='etat' >

Case ‘!affich’: tr_affich( …) ;break; Avec boutons


Case ‘ inserer’: tr_inserer( …) ;break; <input type=submit name= 'inserer'
On Clik=‘!etat.value=!inserer;' >
… }
Remplacé par 1 instruction: (=> en php la var $etat est positionnée)
eval( ‘!tr_!’ . $etat. ‘!( …);!’) ;
<form … method=post …
Car php =interpréteur action = $PHP_SELF >
Fait revenir au même programme PHP
Avec la var $etat bien valuée!
!

23 24
Implantation en PHP
L'architecture est implantée dans divers générateurs
d'applications web en php:

! Ambivalence : http://amb.sourceforge.net/

! php.MVC : http://www.phpmvc.net/

! Phrame : http://phrame.sourceforge.net/

! Eocene : http://www.eocene.net/

25

Vous aimerez peut-être aussi