Comme on le voit avec la solution adoptée ci-dessus, la modification est d’une part tout à fait mineure, d’autre part invisible pour l’application qui se contente d’appeler le générateur
Trang 1238 Chapitre 5 Organisation du développement
on ne visait pas une application portable Comme on le voit avec la solution adoptée ci-dessus, la modification est d’une part tout à fait mineure, d’autre part invisible pour l’application qui se contente d’appeler le générateur quand elle en a besoin
5.3.3 PDO, l’interface générique d’accès aux bases relationnelles
La dernière chose à faire pour assurer la portabilité de l’application est d’utiliser une interface normalisée d’accès à la base de données, qui cache les détails des API propres à chaque système, comme le nom des fonctions, l’ordre des paramètres,
le type du résultat, etc Depuis la version 5.1 de PHP cette interface existe de
manière standardisée sour le nom PHP Data Objects (PDO) PDO ne dispense pas
des précautions syntaxiques présentées ci-dessus, mais fournit des méthodes d’accès standardisées à une base de données, quel que soit le système sous-jacent
PDO ne présente aucune difficulté maintenant que vous êtes rôdés à l’interface
PHP/MySQL Voici un exemple similaire au script ApplClasseMySQL.php, page 119, pour interroger la table FilmSimple.
Exemple 5.9 exemples/ApplPDO.php:Utilisation de PDO
<? xml v e r s i o n = " 1 0 " e n c o d i n g = " i s o−8959−1 " ? >
<!DOCTYPE html PUBLIC "−//W3C/ / DTD XHTML 1 0 S t r i c t / / EN"
" h t t p : / / www w3 o r g / TR / xhtml1 /DTD/ xhtml1−s t r i c t dtd ">
<html xmlns= " h t t p : / / www w3 o r g / 1 9 9 9 / xhtml " xml : l a n g = " f r " >
<head >
< t i t l e > I n t e r f a c e PDO< / t i t l e >
< l i n k r e l = ’ s t y l e s h e e t ’ h r e f = " f i l m s c s s " t y p e = " t e x t / c s s " / >
</ head >
<body >
<h1> I l l u s t r a t i o n de l ’ i n t e r f a c e PDO< / h1>
<? php
/∗∗
∗ Exemple de programmation avec PDO
∗ /
r e q u i r e _ o n c e ( " Connect php " ) ;
t r y {
/ / On s e c o n n e c t e
$bd = new PDO( ’ m y s q l : h o s t = ’ SERVEUR ’ ; dbname= ’ BASE , NOM, PASSE ) ;
/ / On e x é c u t e une r e q u ê t e
$ r e s u l t a t = $bd−>que r y ( " SELECT ∗ FROM FilmSimple " ) ;
/ / On r é c u p è r e l e s l i g n e s
w h i l e ( $ f i l m = $ r e s u l t a t−>f e t c h (PDO : : FETCH_OBJ) ) {
Trang 25.3 Portabilité multi-SGBD 239
echo " <b> $ f i l m−> t i t r e </ b > , paru en $film −>annee , r é a l i s é "
" p a r $ f i l m−>p r e n o m _ r e a l i s a t e u r $film −>n o m _ r e a l i s a t e u r < br
/ >\n " ; }
/ / E t on f e r m e l e c u r s e u r
$ r e s u l t a t s−>c l o s e C u r s o r ( ) ;
}
c a t c h ( E x c e p t i o n $e ) {
echo ’ E r r e u r PDO : ’ $e−>getCode " −− " $e−>g e t M e s s a g e ( )
’ < b r / > ’ ;
}
? >
</ body >
</ html >
On commence donc par instancier une connexion avec la base de données Il s’agit d’un objet de la classe PDO, dont le constructeur prend en entrée les paramètres habituels : serveur, nom de la base, et compte de connexion On précise également que l’on se connecte à MySQL C’est le seul point à modifier pour utiliser un autre système
On peut ensuite exécuter une requête d’interrogation avec la méthode query() Elle renvoie un objet instance de PDOStatement qui sert à parcourir le résultat avec
la méthode fetch() On passe à cette dernière méthode le format (objet ou tableau) dans lequel on souhaite obtenir le résultat
Tout est donc semblable, à quelques détails près, à ce que nous utilisons depuis plusieurs chapitres pour MySQL Quand on veut protéger par un échappement les données à insérer dans une requête, on utilise la méthode quote() Notez égale-ment que PDO distingue les requêtes d’interrogation, exécutées avec query(), des requêtes de mise à jour pour lesquelles on utilise exec()
Si vous voulez créer une application portable multi-SGBD, l’apprentissage de PDO ne pose aucun problème Nous y revenons de manière plus complète dans le cadre de la programmation avec le Zend Framework, chapitre 9 Pour le site WEB
-SCOPE, nous continuons à utiliser la classe abstraite BD, conçue dans le même but, et dont la réalisation est décrite dans le chapitre 3 Rappelons que cette classe fixe les méthodes communes à tous les systèmes, et se décline en sous-classes implantant ces méthodes pour chaque système utilisé Rien n’empêche de revoir l’implantation de cette classe avec PDO, de manière transparente pour le reste de l’application Nous pouvons donc considérer que notre application est portable d’un SGBD à un autre
Trang 4Architecture du site :
6
Ce chapitre est consacré au « motif de conception » (design pattern)
Modèle-Vue-Contrôleur (MVC) Ce pattern est maintenant très répandu, notamment pour la
réalisation de sites web, et mène à une organisation rigoureuse et logique du code
Un des objectifs est la séparation des différentes « couches » constituant une application, de manière à pouvoir travailler indépendamment sur chacune Il devrait par exemple toujours être possible de revoir complètement la présentation d’un site sans toucher au code PHP, et, réciproquement, le code PHP devrait être réalisé avec
le minimum de présupposés sur la présentation La question de l’évolutivité du code est elle aussi essentielle Un logiciel évolue toujours, et doit donc être modifiable facilement et sans dégradation des fonctions existantes (régression) Enfin, dans tous les cas, l’organisation du code doit être suffisamment claire pour qu’il soit possible de retrouver très rapidement la partie de l’application à modifier, sans devoir ouvrir des dizaines de fichiers
Ce chapitre présente le MVC dans un contexte pratique, en illustrant les diffé-rentes composantes par des fonctionnalités intégrées au site WEBSCOPE De fait, à
la fin du chapitre nous disposerons d’un cadre de développement MVC dans lequel l’ensemble du site prendra place Pour des raisons de clarté et d’introduction à des concepts parfois complexes, le MVC présenté ici vise davantage à la simplicité et
à la légèreté qu’à la richesse L’apprentissage de solutions plus complètes destinées à des développements à grande échelle devrait en être facilité J’espère vous convaincre ainsi de l’intérêt de cette approche pour toutes vos réalisations
Trang 5242 Chapitre 6 Architecture du site : le pattern MVC
6.1 LE MOTIF DE CONCEPTION MVC
Cette introduction au MVC est volontairement courte afin de dire l’essentiel sans vous surcharger avec toutes les subtilités conceptuelles qui accompagnent le sujet
Je passe ensuite directement aux aspects pratiques avec la réalisation « maison » du MVC que nous allons utiliser pour implanter notre site
6.1.1 Vue d’ensemble
L’objectif global du MVC est de séparer les aspects traitement, données et présentation,
et de définir les interactions entre ces trois aspects En simplifiant, les données
sont gérées par le modèle, la présentation par la vue, les traitements par des actions
et l’ensemble est coordonné par les contrôleurs La figure 6.1 donne un aperçu de
l’architecture obtenue, en nous plaçant d’emblée dans le cadre spécifique d’une application web
Vue Modèle
requête HTTP
réponse HTTP
Contrôleur A Contrôleur B Action A1
Contrôleur
frontal
Action B1 Action A2
Figure 6.1 — Aperçu général d’une application MVC
La figure montre une application constituée de plusieurs contrôleurs, chacun constitué d’un ensemble d’actions La première caratéristique de cette organisation est donc de structurer hiérarchiquement une application Dans les cas simples, un seul contrôleur suffit, contenant l’ensemble des actions qui constituent l’application
Pour de très larges applications, on peut envisager d’ajouter un niveau, les modules,
qui regroupent plusieurs contrôleurs
Chaque requête HTTP est prise en charge par une action dans un contrôleur Il
existe un contrôleur frontal qui analyse une requête HTTP, détermine cette action et
se charge de l’exécuter en lui passant les paramètres HTTP
Au niveau du déroulement d’une action, les deux autres composants, la vue et
le modèle, entrent en jeu Dans le schéma de la figure 6.1, l’action A1 s’adresse au modèle pour récupérer des données et peut-être déclencher des traitements spéci-fiques à ces données L’action passe ensuite les informations à présenter à la vue qui
se charge de créer l’affichage Concrètement, cette présentation est le plus souvent
un document HTML qui constitue la réponse HTTP