Académique Documents
Professionnel Documents
Culture Documents
Stahe PHP MVC
Stahe PHP MVC
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
-3Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Le traitement d'une demande d'un client se droule selon les tapes suivantes :
1
2
3
4
5
Le client fait une demande au contrleur. Ce contrleur voit passer toutes les demandes des clients. C'est la
porte d'entre de l'application. C'est le C de MVC.
Le contrleur traite cette demande. Pour ce faire, il peut avoir besoin de l'aide de la couche mtier, ce qu'on
appelle le modle M dans la structure MVC.
Le contrleur reoit une rponse de la couche mtier. La demande du client a t traite. Celle-ci peut
appeler plusieurs rponses possibles. Un exemple classique est
# Une page d'erreurs si la demande n'a pu tre traite correctement
# Une page de confirmation sinon
Le contrleur choisit la rponse (= vue) envoyer au client. Celle-ci est le plus souvent une page contenant
des lments dynamiques. Le contrleur fournit ceux-ci la vue.
La vue est envoye au client. C'est le V de MVC.
On mettra la logique mtier de l'application dans des modules spars des modules chargs de contrler le
dialogue demande-rponse. L'architecture MVC devient la suivante :
-4Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
M=modle
V=vues
C=contrleur
Le bloc [Actions], ensemble de scripts PHP chargs d'excuter les actions demandes par l'utilisateur.
Le bloc [Classes mtier] qui regroupe les modules PHP ncessaires la logique de l'application. Ils sont
indpendants du client. Par exemple, la fonction permettant de calculer un impt partir de certaines
informations qui lui sont fournies en paramtres, n'a pas se soucier de la faon dont ont t acquises cellesci.
Le bloc [Classes d'accs aux donnes] qui regroupe les modules PHP qui obtiennent les donnes
ncessaires au contrleur, souvent des donnes persistantes (BD, fichiers, ...)
Les gnrateurs [pagex.php] des vues envoyes comme rponse au client.
Dans les cas les plus simples, la logique applicative est souvent rduite deux
modules :
Le module [contrle] assurant le dialogue client-serveur : traitement de la requte, gnration des diverses
rponses
Le module [mtier] qui reoit du module [contrle] des donnes traiter et lui fournit en retour des rsultats.
Ce module [mtier] gre alors lui-mme l'accs aux donnes persistantes.
-5Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
On commencera par dfinir toutes les vues de l'application. Celles-ci sont les pages web prsentes
l'utilisateur. On se placera du point de vue de celui-ci pour dessiner les vues. On distingue trois types de
vues :
Le formulaire de saisie qui vise obtenir des informations de l'utilisateur. Celui-ci dispose en gnral d'un
bouton pour envoyer au serveur les informations saisies.
La page de rponse qui ne sert qu' donner de l'information l'utilisateur. Celle-ci dispose souvent d'un ou
de plusieurs liens permettant l'utilisateur de poursuivre l'application avec une autre page.
la page mixte : le contrleur a envoy au client une page contenant des informations qu'il a gnres. Cette mme
page va servir au client pour fournir au contrleur de nouvelles informations provenant de l'utilisateur.
Chaque vue donnera naissance une page PHP. Pour chacune de celles-ci :
Les informations destination de l'utilisateur qui devront tre fournies par le contrleur en paramtres la
vue PHP. Une solution simple est la suivante :
Le contrleur met dans un dictionnaire $dReponse les informations qu'il veut fournir une vue V
Le contrleur fait afficher la vue V. Si celle-ci correspond au fichier source V.php, cet affichage est obtenu
simplement par l'instruction include V.php.
L'inclusion prcdente est une inclusion de code dans le contrleur. Le dictionnaire $dReponse renseign
par celui-ci est accessible directement par le code de V.php.
Les donnes de saisie qui devront tre transmises au programme principal pour traitement. Celles-ci devront
faire partie d'un formulaire HTML (balise <form>).
On pourra schmatiser les E/S de chaque vue
Les entres sont les donnes que devra fournir le contrleur la page PHP
Les sorties sont les donnes que devra fournir la page PHP au contrleur de l'aplication. Elles font partie d'un
formulaire HTML et le contrleur les rcuprera par une opration du type $_GET["param"] (mthode GET)
ou $_POST ["param"] (mthode POST).
Frquemment, la page finale envoye au client n'est pas une vue mais une composition de vues. Par
exemple, la page envoye un utilisateur peut avoir la forme suivante :
-6Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
La zone 1 peut tre un bandeau de titre, la zone 2 un bandeau de menu, la zone 3 une zone de contenu. En PHP
cette composition peut tre obtenue par le code HTML/PHP suivant :
<table>
<tr>
<td><?php include zone1.php ?></td>
</tr>
<tr>
<td><?php include zone2.php ?></td>
<td><?php include zone3.php ?></td>
</tr>
</table>
On crira le code PHP/HTML de chaque modle de rponse. Son code est gnralement simple. Celui de l'exemple
ci-desssus pourrait tre :
<?php
// initialisations pour les tests sans contrleur
...
?>
<html>
<head>
<title><?php echo $dReponse['titre'] ?></title>
<link type="text/css" href="<?php echo $dReponse['style']['url'] ?>" rel="stylesheet" />
</head>
<body>
<table>
<tr>
<td><?php include $dReponse['urlZone1'] ?></td>
</tr>
<tr>
<td><?php include $dReponse['urlZone2'] ?></td>
<td><?php include $dReponse['urlZone3'] ?></td>
</tr>
</table>
</body>
</html>
On utilisera chaque fois que c'est possible une feuille de style afin de pouvoir changer le "look" de la rponse sans
avoir modifier le code PHP/HTML.
On crira le code PHP/HTML de chaque vue lmentaire, lment de la page envoye en rponse au client.
Il aura le plus souvent la forme suivante :
<?php
// ventuellement qqs initialisations notamment en phase de dbogage
...
?>
-7Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
<balise>
...
// on cherchera ici minimiser le code php
</balise>
On notera qu'une vue lmentaire s'intgre dans un modle qui les assemble pour en faire une page HTML. Le code
HTML de la vue lmentaire vient s'insrer dans le code du modle prsent l'tape prcdente. Le plus souvent,
le code du modle intgre dj les balises <html>, <head>, <body>. Il est donc peu frquent de trouver ces balises
dans une vue lmentaire.
On peut procder aux tests des diffrents modles de rponse et vues lmentaires
Chaque modle de rponse est test. Si un modle s'appelle modele1.php, on demandera avec un
navigateur l'URL http://localhost/chemin/modele1.php Le modle attend des valeurs du contrleur. Ici on
l'appelle directement et non via le contrleur. Le modle ne recevra pas les paramtres attendus. Afin que
les tests soient nanmoins possibles on initialisera soi-mme, avec des constantes, les paramtres attendus
dans la page PHP du modle.
Chaque modle est test ainsi que toutes les vues lmentaires. C'est aussi le moment d'laborer les
premiers lments des feuilles de style utilises.
On crit ensuite la logique applicative de l'application :
Le contrleur ou programme principal gre en gnral plusieurs actions. Il faut que dans les requtes qui lui
parviennent l'action accomplir soit dfinie. Cela peut se faire au moyen d'un paramtre de la requte que
nous appellerons ici action :
Si la requte provient d'un formulaire (<form>), ce paramtre peut tre un paramtre cach du formulaire :
<form ... action="/C/main.php" method="post" ...>
<input type="hidden" name="action" value="uneAction">
...
</form>
Si la requte provient d'un lien, on peut paramtrer celui-ci :
<a href="/C/main.php?action=uneAction">lien</a>
Le contrleur peut commencer par lire la valeur de ce paramtre puis dlguer le traitement de la requte un
module charg de traiter ce type de requte. Nous nous plaons ici dans le cas ou tout est contrl par un unique
script appel main.php. Si l'application doit traiter des actions action1, action2, ..., actionx on peut crer au sein
du contrleur une fonction par action. S'il y a beaucoup d'actions, on peut arriver un contrleur "dinosaure". On
peut aussi crer des scripts action1.php, action2.php, ...,actionx.php chargs de traiter chacune des actions. Le
contrleur devant traiter l'acton actionx se contentera de charger le code du script correspondant par une instruction
du genre include "actionx.php". L'avantage de cette mthode est qu'on travaille en-dehors du code du contrleur.
Chaque personne de l'quipe de dveloppement peut ainsi travailler sur le script de traitement d'une action actionx de
faon relativement indpendante. L'inclusion du code du script actionx.php dans le code du contrleur au moment
de l'excution a galement l'avantage d'allger le code charg en mmoire. Seul le code de traitement de l'action en
cours est charg. Cette inclusion de code fait que des variables du contrleur peuvent entrer en collision avec celles
du script de l'action. Nous verrons que nous pouvons faire en sorte de limiter les variables du contrleur quelques
variables bien dfinies qu'il faudra alors viter d'utiliser dans les scripts.
On cherchera systmatiquement isoler le code mtier ou le code d'accs aux donnes persistantes dans
des modules distincts. Le contrleur est une sorte de chef d'quipe qui reoit des demandes de ses clients
(clients web) et qui les fait excuter par les personnes les plus appropries (les modules mtier). Lors de
l'criture du contrleur, on dterminera l'interface des modules mtier crire. Cela si ces modules mtier
sont construire. S'ils existent dj, alors le contrleur s'adaptera l'interface de ces modules existants.
On crira le squelette des modules mtier ncessaires au contrleur. Par exemple, si celui-ci utilise un
module getCodes rendant un tableau de chanes de caractres, on peut se contenter dans un premier temps
d'crire :
function getCodes(){
return array("code1","code2","code3");
-8Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
On peut alors passer aux tests du contrleur et des scripts PHP associs :
Le contrleur, les scripts d'actions, les modles, les vues, les ressources ncessaires l'application
(images,...) sont placs dans le dossier DC associ au contexte C de l'application.
Ceci fait, l'application est teste et les premires erreurs corriges. Si main.php est le contrleur et C
le contexte de l'application, on demandera l'URL http://localhost/C/main.php. A la fin de cette phase,
l'architecture de l'application est oprationnelle. Cette phase de test peut tre dlicate sachant qu'on n'a
peu d'outils de dbogage si on n'utilise pas des environnements de dveloppement volus et en gnral
payants. On pourra s'aider d'instructions echo "message" qui crivent dans le flux HTML envoy au client et
qui apparaissent donc dans la page web affiche par le navigateur.
On crit enfin les classes mtier dont a besoin le contrleur. On a l en gnral le dveloppement classique
d'une classe PHP, dveloppement le plus souvent indpendant de toute application web. Elle sera tout
d'abord teste en dehors de cet environnement, avec une application console par exemple. Lorsqu'une
classe mtier a t crite, on l'intgre dans l'architecture de dploiement de l'application web et on teste sa
correcte intgration. On procdera ainsi pour chaque classe mtier.
-9Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 10 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
}else{
// pas de session
session_destroy();
}
// on prsente la rponse
include $dConfig['vuesReponse'][$dReponse['vuereponse']]['url'];
// fin du script
exit(0);
}//finsession
//-------------------------------------------------------------------function enchainementOK(&$dConfig,&$dSession,$sAction){
// vrifie si l'action courante est autorise vis vis de l'tat prcdent
$etat=$dSession['etat']['principal'];
if(! isset($etat)) $etat='sansetat';
// vrification action
$actionsautorisees=$dConfig['etats'][$etat]['actionsautorisees'];
$autorise= ! isset($actionsautorisees) || in_array($sAction,$actionsautorisees);
return $autorise;
}
//-------------------------------------------------------------------function dump($dInfos){
// affiche un dictionnaire d'informations
while(list($cl,$valeur)=each($dInfos)){
echo "[$cl,$valeur]<br>\n";
}//while
}//suivi
//-------------------------------------------------------------------function trace($msg){
echo $msg."<br>\n";
}//suivi
?>
- 11 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Si une action souhaite mmoriser des informations dans la session, elle ajoutera des cls et des valeurs dans le
dictionnaire $dSession. Toutes les actions partageant la mme session, il y a un risque de conflit de cls de session
si l'application est dveloppe indpendamment par plusieurs personnes. C'est une difficult. Il faut dvelopper un
rfrentiel listant les cls de session, rfrentiel partag par tous. Nous verrons que chaque action se termine par
l'appel la fonction finSession suivante :
// --------------------------------------------------------------function finSession(&$dConfig,&$dReponse,&$dSession){
// $dConfig : dictionnaire de configuration
// $dSession : dictionnaire contenant les infos de session
// $dReponse : le dictionnaire des arguments de la page de rponse
// enregistrement de la session
if(isset($dSession)){
// on met les paramtres de la requte dans la session
$dSession['requete']=strtolower($_SERVER['REQUEST_METHOD'])=='get' ? $_GET :
strtolower($_SERVER['REQUEST_METHOD'])=='post' ? $_POST : array();
$_SESSION['session']=serialize($dSession);
session_write_close();
}else{
// pas de session
session_destroy();
}
// on prsente la rponse
include $dConfig['vuesReponse'][$dReponse['vuereponse']]['url'];
// fin du script
exit(0);
}//finsession
Une action peut dcider de ne pas poursuivre une session. Il lui suffit pour cela de ne pas passer de valeur
au paramtre $dSession de la fonction finSession, auquel cas la session est supprime (session_destroy).
Si le dictionnaire $dSession existe, il est sauvegard dans la session et celle-ci est ensuite enregistre
(session_write_close). L'action en cours peut donc mmoriser des lments dans la session en ajoutant des lments
au dictionnaire $dSession. On notera que le contrleur mmorise automatiquement les paramtres de la requte
courante dans la session. Cela permettra de les rcuprer si besoin est pour traiter la requte suivante.
- 12 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Par configuration, chaque action est associ un script charg de traiter cette action. Par exemple :
// configuration des actions de l'application
$dConfig['actions']['get:init']=array('url'=>'a-init.php');
$dConfig['actions']['post:calculerimpot']=array('url'=>'a-calculimpot.php');
$dConfig['actions']['get:retourformulaire']=array('url'=>'a-retourformulaire.php');
$dConfig['actions']['post:effacerformulaire']=array('url'=>'a-init.php');
$dConfig['actions']['enchainementinvalide']=array('url'=>'a-enchainementinvalide.php');
$dConfig['actions']['actioninvalide']=array('url'=>'a-actioninvalide.php');
actioninvalide
Les actions propres l'application sont notes sous la forme mthode:action o mthode est la mthode get ou post
de la requte et action l'action demande, ici : init, calculerimpot, retourformulaire, effacerformulaire. On remarquera
que l'action est rcupre, quelque soit la mthode GET ou POST d'envoi des paramtres, par la $_GET['action'] :
// on rcupre l'action entreprendre
$sAction=$_GET['action'] ? strtolower($_GET['action']) : 'init';
$sAction=strtolower($_SERVER['REQUEST_METHOD']).":$sAction";
Les lments du formulaire seront posts (method='post'). Nanmoins l'url demande sera main.php?
action=calculerimpot. Les paramtres de cette URL seront rcuprs dans le dictionnaire $_GET alors que les
autres lments du formulaire seront eux rcuprs dans le dictionnaire $_POST.
Muni du dictionnaire des actions, le contrleur excute l'action demande de la faon suivante :
// traitement de l'action
$scriptAction=$dConfig['actions'][$sAction] ?
$dConfig['actions'][$sAction]['url'] :
$dConfig['actions']['actioninvalide']['url'];
include $scriptAction;
Si l'action demande n'est pas dans le dictionnaire des actions, c'est le script correspondant une action invalide qui
sera excut. Une fois le script de l'action charg au sein du contrleur, il s'excute. On remarquera qu'il a accs aux
variables du contrleur ($dConfig, $dSession) ainsi qu'aux dictionnaires super-globaux de PHP ($_GET, $_POST,
$_SERVER, $_ENV, $_SESSION). On trouvera dans le script, de la logique applicative et des appels des classes
mtier. Dans tous les cas, l'action devra
1
2
3
Renseigner le dictionnaire $dSession si des lments doivent tre sauvegards dans la session courante
Indiquer dans $dReponse['vuereponse'] le nom du modle de rponse afficher
Se terminer par l'appel finSession($dConfig, $dReponse, $dSession). Si la session doit tre dtruite,
l'action se terminera simplement par l'appel finSession($dConfig, $dReponse).
- 13 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Par souci de cohrence, l'action pourra mettre dans le dictionnaire $dReponse toutes les informations dont ont besoin
les vues. Mais il n'y a pas d'obligation. Seule la valeur $dReponse['vuereponse'] est indispensable. On remarquera
que tout script d'action se termine par l'appel la fonction finSession qui elle-mme se termine par une opration
exit. On ne revient donc pas d'un script d'action.
Des URL contenues dans la vue soit sous forme de liens sois sous forme de cibles d'actions de type [submit]
Des URL qu'un utilisateur est autoris taper directement dans son navigateur lorsque la vue lui est
prsente.
La liste des tats de l'applications ne se confond pas ncessairement avec celle des vues. Considrons par
exemple une vue lmentaire erreurs.php suivante :
Les erreurs suivantes se sont produites :
<ul>
<?php
for($i=0;$i<count($dReponse["erreurs"]);$i++){
echo "<li class='erreur'>".$dReponse["erreurs"][$i]."</li>\n";
}//for
?>
</ul>
<div class="info"><?php echo $dReponse["info"] ?></div>
<a href="<?php echo $dReponse["href"] ?>"><?php echo $dReponse["lien"] ?></a>
Cette vue lmentaire s'intgrera dans une composition de vues lmentaires qui formera la rponse. Sur cette
vue, il y a un lien qui peut tre positionn dynamiquement. La vue erreurs.php peut alors tre affiche avec n liens
diffrents selon les circonstances. Cela donnera naissance n tats diffrents pour l'application. Dans l'tat n i, la
vue erreurs.php sera affiche avec le lien lieni. Dans cet tat, seule l'utilisation du lien lieni est acceptable.
La liste des tats d'une application et celle des actions possibles dans chaque tat seront consignes dans le
dictionnaire $dConfig ['etats'] :
// configuration des tats de l'application
$dConfig['etats']['e-formulaire']=array(
'actionsautorisees'=>array('post:calculerimpot','get:init','post:effacerformulaire'),
'vue'=>'e-formulaire.php');
$dConfig['etats']['e-erreurs']=array(
'actionsautorisees'=>array('get:retourformulaire','get:init'),
'vue'=>'e-erreurs.php');
$dConfig['etats']['sansetat']=array('actionsautorisees'=>array('get:init'));
L'application ci-dessus a deux tats nomms : e-formulaire et e-erreurs. On rajoute un tat appel sansetat qui
correspond au dmarrage initial de l'application alors qu'elle n'avait pas d'tat. Dans un tat E, la liste des actions
autorises se trouve dans le tableau $dConfig['etats'][E]['actionsautorisees']. On y prcise la mthode (get/post)
- 14 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
autorise pour l'action et le nom de celleci. Dans l'exemple ci-dessus, il y a quatre actions possibles : get:init,
post:alculerimpot, get:retourformulaire et post:effacerformulaire.
Muni du dictionnaire $dConfig['etats'], le contrleur peut dire si l'action $sAction en cours est autorise ou non dans
l'tat actuel de l'application. Celui est construit par chaque action et stock dans la session dans $dSession['etat'].
Le code du contrleur pour vrifier si l'action courante est autorise ou non est le suivant :
.....
// l'enchanement des actions est-il normal ?
if( ! enchainementOK($dConfig,$dSession,$sAction)){
// enchanement anormal
$sAction='enchainementinvalide';
}//if
// traitement de l'action
$scriptAction=$dConfig['actions'][$sAction] ?
$dConfig['actions'][$sAction]['url'] :
$dConfig['actions']['actioninvalide']['url'];
include $scriptAction;
..........
//-------------------------------------------------------------------function enchainementOK(&$dConfig,&$dSession,$sAction){
// vrifie si l'action courante est autorise vis vis de l'tat prcdent
$etat=$dSession['etat']['principal'];
if(! isset($etat)) $etat='sansetat';
// vrification action
$actionsautorisees=$dConfig['etats'][$etat]['actionsautorisees'];
$autorise= ! isset($actionsautorisees) || in_array($sAction,$actionsautorisees);
return $autorise;
}
La logique est la suivante : une action $sAction est autorise si elle se trouve dans la liste $dConfig['etats'][$etat]
['actionsautorisees'] ou si cette liste est inexistante autorisant alors toute action. $etat est l'tat de l'application la
fin du prcdent cycle demande client/rponse serveur. Cet tat a t stock dans la session et est retrouv l. Si on
dcouvre que l'action demande est illgale, on fait excuter le script $dConfig['actions']['enchainementinvalide']
['url']. Ce script se chargera de transmettre une rponse adquate au client.
En phase de dveloppement, on pourra ne pas remplir le dictionnaire $dConfig['etats']. Dans ce cas, tout tat
autorise toute action. On pourra mettre au point le dictionnaire lorsque l'application aura t totalement dbogue.
Il protgera l'application d'actions non autorises.
On a deux tats appels [e-formulaire] et [e-erreurs]. A un tat correspond un gnrateur de rponse et un seul.
Ce gnrateur doit gnrer la rponse/vue envoyer au client. Dans l'exemple ci-dessus, si un script d'action
- 15 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
[$scriptAction] indique que l'application doit tre mise dans l'tat [e-formulaire], alors le contrleur demandera
l'excution du script [e-formulaire.php]. Ceci est ralis par la squence de code suivante dans le contrleur :
// envoi de la rponse(vue) au client
$sEtat=$dSession['etat']['principal'];
$scriptVue=$dConfig['etats'][$sEtat]['vue'];
include $scriptVue;
Le gnrateur de vue [$scriptVue] va s'excuter et prparer la vue envoyer. Chaque gnrateur de vue se termine
par un appel la procdure [finSession] du contrleur gnrique. Celle-ci a pour objectif :
Nous avons dit qu'une rponse pouvait avoir diffrents modles de page. Ceux-ci sont placs par configuration dans
['vuesReponse']. Dans une application deux modles, on pourrait ainsi avoir :
$dConfig['vuesReponse']['modele1']=array('url'=>'m-modele1.php');
$dConfig['vuesReponse']['modele2']=array('url'=>'m-modele2.php');
Le gnrateur de vue prcise dans $dReponse['vuereponse'] le modle de la rponse dsire. Par exemple :
$dReponse['vueReponse']='modele1';
Le script [m-modele1.php] s'excute. C'est une page PHP de prsentation, sans logique de programmation mais avec
des lments dynamiques. Une fois cette page envoye au client, le contrleur s'arrte (exit). Le cycle demanderponse du client-serveur est termin.
III-H - Dbogage
Le contrleur propose deux fonction de dbogage :
La fonction dump permet d'afficher le contenu d'un dictionnaire dans ce mme flux
Tout script d'action pourra utiliser ces deux fonctions. En effet, le code du script d'action tant inclus (include) dans
le code du contrleur, les fonctions trace et dump seront visibles des scripts.
- 16 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
III-I - Conclusion
Le contrleur gnrique vise permettre au dveloppeur de se concentrer sur les actions et les vues de son
application. Il assure pour lui :
- 17 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
IV-A - Le problme
on dsire crire une application permettant un utilisateur de calculer son impt sur le web. On se place dans le cas
simplifi d'un contribuable n'ayant que son seul salaire dclarer (chiffres 2004 pour revenus 2003) :
On calcule le nombre de parts du salari nbParts=nbEnfants/2 +1 s'il n'est pas mari, nbEnfants/2+2 s'il est
mari, o nbEnfants est son nombre d'enfants.
S'il a au moins trois enfants, il a une demi part de plus
Chaque ligne a 3 champs. Pour calculer l'impt I, on recherche la premire ligne o QF<=champ1. Par exemple, si
QF=5000 on trouvera la ligne
8382 0.0683 291.09
L'impt I est alors gal 0.0683*R - 291.09*nbParts. Si QF est tel que la relation QF<=champ1 n'est jamais vrifie,
alors ce sont les coefficients de la dernire ligne qui sont utiliss. Ici :
0 0.4809 9505.54
Ce qui donne l'impt I=0.4809*R - 9505.54*nbParts.
- 18 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
La demande du client est envoye au contrleur sous la forme d'une requte de la forme main.php?
action=xx. La valeur du paramtre action dtermine le script du bloc ACTIONS excuter. Le script d'action
excut rend au contrleur une variable indiquant l'tat dans lequel doit tre place l'application web. Muni de
cet tat, le contrleur va activer l'un des gnrateurs de vues pour envoyer la rponse au client.
c-impots-data.php est la classe charge de fournir au contrleur les donnes dont il a besoin
- 19 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
class impots_data{
// classe d'accs la source de donnes DBIMPOTS
// attributs
var $sDSN; // la chane de connexion
var $sDatabase; // le nom de la base
var $oDB; // connexion la base
var $aErreurs; // liste d'erreurs
var $oRsultats; // rsultat d'une requte
var $connect; // boolen qui indique si on est connect ou non la base
var $sQuery; // la dernire requte excute
// constructeur
function impots_data($dDSN){
// $dDSN : dictionnaire dfinissant la liaison tablir
// $dDSN['sgbd'] : le type du SGBD auquel il faut se connecter
// $dDSN['host'] : le nom de la machine hte qui l'hberge
// $dDSN['database'] : le nom de la base laquelle il faut se connecter
// $dDSN['user'] : un utilisateur de la bse
// $dDSN['mdp'] : son mot de passe
// cre dans $oDB une connexion la base dfinie par $dDSN sous l'identit de $dDSN['user']
// si la connexion russit
// met dans $sDSN la chane de connexion la base
// met dans $sDataBase le nom de la base laquelle on se connecte
// met $connect vrai
// si la connexion choue
// met les msg d'erreurs adquats dans la liste $aErreurs
// ferme la connexion si besoin est
// met $connect faux
// raz liste des erreurs
$this->aErreurs=array();
// on cre une connexion la base $sDSN
$this>sDSN=$dDSN["sgbd"]."://".$dDSN["user"].":".$dDSN["mdp"]."@".$dDSN["host"]."/".$dDSN
["database"];
$this->sDatabase=$dDSN["database"];
$this->connect();
// connect ?
if( ! $this->connect) return;
// la connexion a russi
$this->connect=TRUE;
}//constructeur
// -----------------------------------------------------------------function connect(){
// (re)connexion la base
// raz liste des erreurs
$this->aErreurs=array();
// on cre une connexion la base $sDSN
$this->oDB=DB::connect($this->sDSN,true);
// erreur ?
if(DB::iserror($this->oDB)){
// on note l'erreur
$this->aErreurs[]="Echec de la connexion la base [".$this->sDatabase."] : [".$this->oDB>getMessage()."]";
// la connexion a chou
$this->connect=FALSE;
// fin
return;
}
// on est connect
$this->connect=TRUE;
}//connect
- 20 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
// -----------------------------------------------------------------function disconnect(){
// si on est connect, on ferme la connexion la base $sDSN
if($this->connect){
$this->oDB->disconnect();
// on est dconnect
$this->connect=FALSE;
}//if
}//disconnect
// ------------------------------------------------------------------function execute($sQuery){
// $sQuery : requte excuter
// on mmorise la requte
$this->sQuery=$sQuery;
// est-on connect ?
if(! $this->connect){
// on note l'erreur
$this->aErreurs[]="Pas de connexion existante la base [$this->sDatabase]";
// fin
return;
}//if
// excution de la requte
$this->oRsultats=$this->oDB->query($sQuery);
// erreur ?
if(DB::iserror($this->oRsultats)){
// on note l'erreur
$this->aErreurs[]="Echec de la requte [$sQuery] : [".$this->oRsultats->getMessage()."]";
// retour
return;
}//if
}//execute
// -----------------------------------------------------------------function getData(){
// on rcupre les 3 sries de donnes limites, coeffr, coeffn
$this->execute('select limites, coeffR, coeffN from impots');
// des erreurs ?
if(count($this->aErreurs)!=0) return array();
// on parcourt le rsultat du select
while ($ligne = $this->oRsultats->fetchRow(DB_FETCHMODE_ASSOC)) {
$limites[]=$ligne['limites'];
$coeffr[]=$ligne['coeffR'];
$coeffn[]=$ligne['coeffN'];
}//while
return array($limites,$coeffr,$coeffn);
}//getDataImpots
}//classe
?>
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
"sgbd"=>"mysql",
"user"=>"seldbimpots",
"mdp"=>"mdpseldbimpots",
"host"=>"localhost",
"database"=>"dbimpots"
);
// ouverture de la session
$oImpots=new impots_data($dDSN);
// erreurs ?
if(checkErreurs($oImpots)){
exit(0);
}
// suivi
echo "Connect la base...\n";
// rcupration des donnes limites, coeffr, coeffn
list($limites,$coeffr,$coeffn)=$oImpots->getData();
// erreurs ?
if( ! checkErreurs($oImpots)){
// contenu
echo "donnes : \n";
for($i=0;$i<count($limites);$i++){
echo "[$limites[$i],$coeffr[$i],$coeffn[$i]]\n";
}//for
}//if
// on se dconnecte
$oImpots->disconnect();
// suivi
echo "Dconnect de la base...\n";
// fin
exit(0);
// ---------------------------------function checkErreurs(&$oImpots){
// des erreurs ?
if(count($oImpots->aErreurs)!=0){
// affichage
for($i=0;$i<count($oImpots->aErreurs);$i++){
echo $oImpots->aErreurs[$i]."\n";
}//for
// des erreurs
return true;
}//if
// pas d'erreurs
return false;
}//checkErreurs
?>
- 22 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 23 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
if(checkErreurs($oImpots)){
exit(0);
}
// suivi
echo "Connect la base...\n";
// rcupration des donnes limites, coeffr, coeffn
list($limites,$coeffr,$coeffn)=$oImpots->getData();
// erreurs ?
if(checkErreurs($oImpots)){
exit(0);
}
// on se dconnecte
$oImpots->disconnect();
// suivi
echo "Dconnect de la base...\n";
// calcul d'un impt
$dData=array('limites'=>&$limites,'coeffr'=>&$coeffr,'coeffn'=>&$coeffn);
$dPerso=array('enfants'=>2,'salaire'=>60000,'mari'=>true,'impot'=>0);
new impots_calcul($dPerso,$dData);
dump($dPerso);
$dPerso=array('enfants'=>2,'salaire'=>60000,'mari'=>false,'impot'=>0);
new impots_calcul($dPerso,$dData);
dump($dPerso);
$dPerso=array('enfants'=>3,'salaire'=>60000,'mari'=>false,'impot'=>0);
new impots_calcul($dPerso,$dData);
dump($dPerso);
$dPerso=array('enfants'=>3,'salaire'=>60000,'mari'=>true,'impot'=>0);
new impots_calcul($dPerso,$dData);
dump($dPerso);
// fin
exit(0);
// ---------------------------------function checkErreurs(&$oImpots){
// des erreurs ?
if(count($oImpots->aErreurs)!=0){
// affichage
for($i=0;$i<count($oImpots->aErreurs);$i++){
echo $oImpots->aErreurs[$i]."\n";
}//for
// des erreurs
return true;
}//if
// pas d'erreurs
return false;
}//checkErreurs
?>
[mari,1]
[mari,0]
[mari,0]
[mari,1]
[impot,4299]
[impot,6871]
[impot,4299]
[impot,2976]
- 24 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 25 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
On remarquera que le formulaire est rgnr dans l'tat o l'utilisateur l'a valid et qu'il affiche de plus le montant
de l'impt payer. L'utilisateur peut faire des erreurs de saisie. Celles-ci lui sont signales par une page d'erreurs
qu'on appelera la vue [verreurs].
Le lien [Retour au formulaire de saisie] permet l'utilisateur de retrouver le formulaire tel qu'il l'a valid.
- 26 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Enfin le bouton [Effacer le formulaire] remet le formulaire dans son tat initial, c.a.d. tel que l'utilisateur l'a reu lors
de la demande initiale. C'est un simple bouton HTML de type [Reset].
Nous venons de dcrire les deux classes c-impots-data.php et c-impots-calcul.php. Nous dcrivons maintenant
les autres lments de l'architecture de notre application.
- 27 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 28 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
}
//-------------------------------------------------------------------function dump($dInfos){
// affiche un dictionnaire d'informations
while(list($cl,$valeur)=each($dInfos)){
echo "[$cl,$valeur]<br>\n";
}//while
}//suivi
//-------------------------------------------------------------------function trace($msg){
echo $msg."<br>\n";
}//suivi
?>
get:init : c'est l'action qui est dclenche lors de la demande initiale sans paramtres au contrleur. Elle
gnre la vue [v-formulaire] vide.
post:effacerformulaire : action dclenche par le bouton [Effacer le formulaire]. Elle gnre la vue [vformulaire] vide.
post:calculerimpot : action dclenche par le bouton [Calculer l'impt]. Elle gnre soit la vue [vformulaire] avec le montant de l'impt payer, soit la vue [v-erreurs].
get:retourformulaire : action dclenche par le lien [Retour au formulaire de saisie]. Elle gnre la vue
[vformulaire] pr-remplie avec les donnes errones.
chaque action, est associ le script charg de la traiter. Chaque action va emmener l'application web dans un
tat enregistr dans l'lment $dSession['etat']['principal']. Cet tat est destin tre sauvegard dans la session
et c'est pourquoi il est plac dans le dictionnaire $dSession. Par ailleurs, l'action enregistre dans le dictionnaire
$dReponse, les informations utiles pour l'affichage de la vue lie au nouvel tat dans lequel va se trouver l'application.
- 29 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
'actionsautorisees'=>array('get:retourformulaire','get:init'),
'vue'=>'e-erreurs.php');
$dConfig['etats']['sansetat']=array('actionsautorisees'=>array('get:init'));
Dans un tat, les actions autorises correspondent aux URL cibles des liens ou boutons [submit] de la vue associe
l'tat. De plus, l'action 'get:init' est tout le temps autorise. Cela permet l'utilisateur de rcuprer l'URL main.php
dans la liste des URL de son navigateur et de la rejouer quelque soit l'tat de l'application. C'est une sorte de
rinitialisation ' la main'. L'tat 'sansetat' n'existe qu'au dmarrage de l'application.
chaque tat de l'application est associ un script charg de gnrer la vue associe
l'tat :
L'tat [e-formulaire] va prsenter la vue [v-formulaire] avec des variantes. En effet, la vue [v-formulaire] peut
tre prsente vide ou pr-remplie ou avec le montant de l'impt. L'action qui amnera l'application dans l'tat
[e-formulaire] prcise dans la variable $dSession['etat']['principal'] l'tat principal de l'application. Le contrleur
n'utilise que cette information. Dans notre application, l'action qui amne l'tat [e-formulaire] ajoutera dans
$dSession['etat']['secondaire'] une information complmentaire permettant au gnrateur de la rponse de savoir
s'il doit gnrer un formulaire vide, pr-rempli, avec ou sans le montant de l'impt. On aurait pu procder diffremment
en estimant qu'il y avait l trois tats diffrents et donc trois gnrateurs de vue crire.
- 30 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
'vue'=>'e-erreurs.php');
$dConfig['etats']['sansetat']=array('actionsautorisees'=>array('get:init'));
// configuration modle de l'application
$dConfig["DSN"]=array(
"sgbd"=>"mysql",
"user"=>"seldbimpots",
"mdp"=>"mdpseldbimpots",
"host"=>"localhost",
"database"=>"dbimpots"
);
?>
Un script d'action est appel par le contrleur selon le paramtre action que celui-ci a reu du client.
Aprs excution, le script d'action doit indiquer au contrleur l'tat dans lequel placer l'application. Cet tat
doit tre indiqu dans $dSession['etat']['principal'].
Un script d'action peut vouloir placer des informations dans la session. Il le fait en plaant celles-ci dans le
dictionnaire $dSession, ce dictionnaire tant automatiquement sauvegard dans la session par le contrleur
la fin du cycle demande-rponse.
Un script d'action peut avoir des informations passer aux vues. Cet aspect est indpendant du contrleur. Il
s'agit de l'interface entre les actions et les vues, interface propre chaque application. Dans l'exemple tudi
ici, les actions fourniront des informations aux gnrateurs de vues via un dictionnaire appel $dReponse.
Ce script se contente de fixer dans $dSession['etat']['principal'] l'tat dans lequel doit se trouver l'application, l'tat
[eformulaire] et amne dans $dSession['etat']['secondaire'] une prcision sur cet tat. Le fichier de configuration
nous montre que le contrleur excutera le script e-formulaire.php pour gnrer la rponse au client.
$dConfig['etats']['e-formulaire']=array(
'actionsautorisees'=>array('post:calculerimpot','get:init','post:effacerformulaire'),
'vue'=>'e-formulaire.php');
Le script e-formulaire.php gnrera la vue [v-formulaire] dans sa variante [init], c.a.d. le formulaire vide.
- 31 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 32 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Le script fait ce qu'il a faire : calculer l'impt. Nous laissons au lecteur le soin de dcrypter le code du traitement.
Nous nous intressons aux tats qui peuvent survenir la suite de cette action :
Les donnes saisies sont incorrectes ou l'accs aux donnes se passe mal : l'application est mise dans l'tat
[e-erreurs]. Le fichier de configuration montre que c'est le script e-erreurs.php qui sera charg de gnrer la
vue rponse :
$dConfig['etats']['e-erreurs']=array(
'actionsautorisees'=>array('get:retourformulaire','get:init'),
'vue'=>'e-erreurs.php');
Dans tous les autres cas, l'application est place dans l'tat [e-formulaire] avec la variante calculimpot
indique dans $dSession ['etat']['secondaire']. Le fichier de configuration montre que c'est le script eformulaire.php qui va gnrer la vue rponse. Il utilisera la valeur de $dSession['etat']['secondaire'] pour
gnrer un formulaire pr-rempli avec les valeurs saisies par l'utilisateur et de plus le montant de l'impt.
- 33 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
On demande simplement ce que l'application soit plac dans l'tat [e-formulaire] dans sa variante
[retourformulaire]. Le fichier de configuration nous montre que le contrleur excutera le script e-formulaire.php
pour gnrer la rponse au client.
$dConfig['etats']['e-formulaire']=array(
'actionsautorisees'=>array('post:calculerimpot','get:init','post:effacerformulaire'),
'vue'=>'e-formulaire.php');
Le script e-formulaire.php gnrera la vue [v-formulaire] dans sa variante [retourformulaire], c.a.d. le formulaire
pr-rempli avec les valeurs saisies par l'utilisateur mais sans le montant de l'impt.
Nous avons dj expliqu cette configuration. Si un enchanement invalide d'actions est dtect, le script
[aenchainementinvalide.php] s'excute :
$dConfig['actions']['enchainementinvalide']=array('url'=>'a-enchainementinvalide.php');
Il consiste placer l'application dans l'tat [e-erreurs]. Nous donnons dans $dSession['etat']['secondaire'] une
information qui sera exploite par le gnrateur de la page d'erreurs. Comme nous l'avons dj vu, ce gnrateur
est [e-erreurs.php] :
$dConfig['etats']['e-erreurs']=array(
'actionsautorisees'=>array('get:retourformulaire','get:init'),
'vue'=>'e-erreurs.php');
Nous verrons le code de ce gnrateur ultrieurement. La vue envoye au client est la suivante :
- 34 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 35 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Au retour d'un script d'action, le contrleur rcupre dans $dSession['etat']['principal'] l'tat dans lequel il doit
mettre l'application. Cet tat a t fix par l'action qui vient d'tre excute. Le contrleur fait alors excuter le
gnrateur de vue associe l'tat. Il trouve le nom de celui-ci dans le fichier de configuration. Le rle du gnrateur
de vue est le suivant :
Il fixe dans $dReponse['vuereponse'] le nom du modle de rponse utiliser. Cette information sera passe
au contrleur. Un modle est une composition de vues lmentaires qui, rassembles, forment la vue finale.
Il prpare les informations dynamiques afficher dans la vue finale. Ce point est indpendant du contrleur. Il
s'agit de l'interface entre le gnrateur de vues et la vue finale. Elle est propre chaque application.
Il se termine obligatoirement par l'appel la fonction finSession du contrleur. Cette fonction va
Sauvegarder la session
Envoyer la rponse
La vue envoye l'utilisateur est dfinie par l'entit $dReponse['vuereponse'] qui dfinit le modle utiliser pour
la rponse finale.
- 36 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Ce script a trois lments dynamiques placs dans un dictionnaire $dReponse et associs aux cls suivantes :
1
2
3
Un gnrateur de vue dsirant utiliser le modle modle1 devra dfinir ces trois lments dynamiques. Nous
dfinissons maintenant les vues lmentaires qui peuvent prendre la place des lments [vue1] et [vue2] du modle.
Le gnrateur de vue devra dfinir deux lments dynamiques placs dans un dictionnaire $dReponse et associs
aux cls suivantes :
1
2
- 37 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Les parties dynamiques de cette vue qui devront tre dfinies par le gnrateur de vue sont associes aux cls
suivantes du dictionnaire $dReponse :
- 38 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Les parties dynamiques de cette vue dfinir par le gnrateur de vue sont associes aux cls suivantes du
dictionnaire $dReponse :
underline;
: transparent;
underline;
: transparent;
: transparent;
- 39 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
.error {
color : red;
font-weight : bold;
}
INPUT.text {
margin-left : 3px;
font-size:8pt;
font-weight:bold;
color:#4A1919;
background-color:#FFF6E0;
border-right:1px solid;
border-left:1px solid;
border-top:1px solid;
border-bottom:1px solid;
}
td.libelle {
background-color: #F0FFFF;
color: #0000CD;
}
td.valeur {
background-color: #DDA0DD;
}
DIV.resultat {
background-color : #FFA07A;
font : bold 12pt;
}
div.info {
color: #FA8072;
}
li.erreur {
color: #DC143C;
}
INPUT.submit {
margin-left : 6px;
font-size:8pt;
font-weight:bold;
color:#4A1919;
background-color:#FFF1CC;
border-right:1px solid;
border-left:1px solid;
border-top:1px solid;
border-bottom:1px solid;
}
- 40 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Un gnrateur de vue est li l'tat dans lequel va tre place l'application. Le lien entre tat et gnrateur de vue
est fix par configuration :
// configuration des tats de l'application
$dConfig['etats']['e-formulaire']=array(
'actionsautorisees'=>array('post:calculerimpot','get:init','post:effacerformulaire'),
'vue'=>'e-formulaire.php');
$dConfig['etats']['e-erreurs']=array(
'actionsautorisees'=>array('get:retourformulaire','get:init'),
'vue'=>'e-erreurs.php');
$dConfig['etats']['sansetat']=array('actionsautorisees'=>array('get:init'));
Nous avons dj indiqu quel tait le rle d'un gnrateur de vue. Rappelons-le ici. Un gnrateur de vue :
fixe dans $dReponse['vuereponse'] le nom du modle de rponse utiliser. Cette information sera passe
au contrleur. Un modle est une composition de vues lmentaires qui rassembles forment la vue finale.
prpare les informations dynamiques afficher dans la vue finale. Ce point est indpendant du contrleur. Il
s'agit de l'interface entre le gnrateur de vues et la vue finale. Elle est propre chaque application.
se termine obligatoirement par l'appel la fonction finSession du contrleur. Cette fonction va
sauvegarder la session
envoyer la rponse
- 41 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
$dReponse['enfants']=$dSession['requete']['txtenfants'];
$dReponse['salaire']=$dSession['requete']['txtsalaire'];
}//if
// on envoie la rponse
finSession($dConfig,$dReponse,$dSession);
?>
On remarquera que le gnrateur de vue respecte les conditions imposes un gnrateur de vue :
Passer des informations ce modle. Ici elles sont passes par l'intermdiaire du dictionnaire $dReponse.
Ici, le modle utilis est 'modle1'. Aussi le gnrateur dfinit-il les deux informations dont a besoin ce modle
$dReponse['vue1'] et $dReponse['vue2'].
Dans le cas particulier de notre application, la vue associe l'tat [e-formulaire] dpend d'une information stocke
dans la variable $dSession['etat']['secondaire']. C'est un choix de dveloppement. Une autre application pourrait
dcider de passer des informations complmentaires d'une autre faon. Par ailleurs, ici toutes les informations
ncessaires l'affichage de la vue finale sont places dans le dictionnaire $dReponse. L encore, c'est un
choix qui appartient au dveloppeur. L'tat [e-formulaire] peut se produire aprs quatre actions diffrentes : init,
calculerimpot, retourformulaire, effacerformulaire. La vue afficher n'est pas exactement la mme dans tous les
cas. Aussi a-t-on distingu ici trois cas dans $dSession['etat']['secondaire'] :
calculimpot : Le formulaire est affich avec le montant de l'impt et les donnes qui ont amen son calcul
Ci-dessus, le script e-formulaire.php utilise cette information pour prsenter la rponse selon ces trois variantes.
- 42 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
La vue envoye l'utilisateur est dfinie par l'entit $dReponse['vuereponse'] qui dfinit le modle utiliser pour
la rponse finale. Pour les tats [e-formulaire] et [e-erreurs], ce modle a t dfini gal modele1 :
$dReponse['vuereponse']='modele1';
Ce modle s'apellera modele2 et le script charg de gnrer ce modle s'appellera m-reponse2.php. Ces
informations sont places dans [config.php] :
$dConfig['vuesReponse']['modele2']=array('url'=>'m-reponse2.php');
- 43 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 44 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 45 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
S'il utilise le lien [Retour au formulaire de saisie], il retrouve le formulaire tel qu'il l'a valid :
- 46 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
On notera que l'application utilise bien les mmes actions que prcdemment. Seul l'aspect des rponses a chang.
- 47 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
</table>
$dReponse['liens'] : Tableau des liens afficher dans [vue2]. Chaque lment du tableau est un dictionnaire
deux cls :
'url' : URL cible du lien
La vue lmentaire [vue3] sera elle, associe au script v-formulaire2.php si on veut afficher le formulaire de saisie
ou au script verreurs2.php si on veut afficher la page d'erreurs. Le code du script v-formulaire2.php est le suivant :
<form method="post" action="main.php?action=calculerimpot">
<table>
<tr>
<td class="libelle">Etes-vous mari(e)</td>
<td class="valeur">
<input type="radio" name="optmarie" <?php echo $dReponse['optoui'] ?> value="oui">oui
<input type="radio" name="optmarie" <?php echo $dReponse['optnon'] ?> value="non">non
</td>
</tr>
<tr>
<td class="libelle">Nombre d'enfants</td>
<td class="valeur">
<input type="text" class="text" name="txtenfants" size="3" value="<?
php echo $dReponse['enfants'] ?
>"
</td>
</tr>
<tr>
<td class="libelle">Salaire annuel</td>
<td class="valeur">
<input type="text" class="text" name="txtsalaire" size="10" value="<?php echo $dReponse
['salaire'] ?>"
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" class="submit" value="Calculer l'impt"></td>
</tr>
</table>
</form>
Les parties dynamiques de cette vue et qui devront tre dfinies par le gnrateur de vue sont associes aux cls
suivantes du dictionnaire $dReponse :
Le script qui gnre la page d'erreurs s'appelle v-erreurs2.php. Son code est le suivant :
Les erreurs suivantes se sont produites :
<ul>
<?php
for($i=0;$i<count($dReponse["erreurs"]);$i++){
echo "<li class='erreur'>".$dReponse["erreurs"][$i]."</li>\n";
}//for
?>
- 48 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
</ul>
<div class="info"><?php echo $dReponse["info"] ?></div>
Les parties dynamiques de cette vue dfinir par le gnrateur de vue sont associes aux cls suivantes du
dictionnaire $dReponse :
- 49 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
"host"=>"localhost",
"database"=>"dbimpots"
);
?>
La modification essentielle et quasi unique consiste changer les gnrateurs de vue associs aux tats [eformulaire] et [eerreurs]. Ceci fait, les nouveaux gnrateurs de vue sont chargs de gnrer les nouvelles pages
rponse.
- 50 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
Les modifications apportes sont identiques celles apportes au gnrateur de vue e-formulaire2.php.
- 51 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
V - Conclusion
Nous avons pu montrer sur un exemple, l'intrt de notre contrleur gnrique. Nous n'avons pas eu crire celui-ci.
Nous nous sommes contents d'crire les scripts des actions, des gnrateurs de vue et des vues de l'application.
Nous avons par ailleurs montr l'intrt de sparer les actions des vues. Nous avons pu ainsi changer l'aspect des
rponses sans modifier une seule ligne de code des scripts d'action. Seuls les scripts impliqus dans la gnration
des vues ont t modifis. Pour que ceci soit possible, le script d'action ne doit faire aucune hypothse sur la vue qui
va visualiser les informations qu'il a calcules. Il doit se contenter de rendre ces informations au contrleur qui les
transmet un gnrateur de vue qui les mettra en forme. C'est une rgle absolue : une action doit tre compltement
dconnecte des vues.
Nous nous sommes approchs dans ce chapitre de la philosophie Struts bien connue des dveloppeurs Java. Un
projet 'open source' appel php.MVC permet de faire du dveloppement web/php avec la philosophie Struts. On
consultera le site http://www.phpmvc.net/ pour plus d'informations.
Les sources des exemples de l'article sont disponibles en tlchargement : [HTTP] [FTP].
- 52 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
VI - ANNEXE - PEAR DB
Note : le texte ci-dessous est tir de la documentation officielle de PEAR DB [http://pear.php.net/]. Il n'est l que
pour faciliter le travail du lecteur de ce document.
VI-A-1 - DSN
To connect to a database through PEAR::DB, you have to create a valid DSN - data source name. This DSN consists
in the following parts:
phptype: Database backend used in PHP (i.e. mysql, odbc etc.)
dbsyntax: Database used with regards to SQL syntax etc.
protocol: Communication protocol to use ( i.e. tcp, unix etc.)
hostspec: Host specification (hostname[:port])
database: Database to use on the DBMS server
username: User name for login
password: Password for login
proto_opts: Maybe used with protocol
The format of the supplied DSN is in its fullest form:
phptype(dbsyntax)://username:password@protocol+hostspec/database
- 53 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
With an up-to-date version of DB, you can use a second DSN format
phptype(syntax)://user:pass@protocol(proto_opts)/database
example: Connect to database through a socket
mysql://user@unix(/path/to/socket)/pear
Connect to database on a non standard port
pgsql://user:pass@word@tcp(localhost:5555)/pear
VI-A-2 - Connect
To connect to a database you have to use the function DB::connect(), which requires a valid DSN as parameter and
optional a boolean value, which determines wether to use a persistent connection or not. In case of success you get
a new instance of the database class. It is strongly recommened to check this return value with DB::isError(). To
disconnect use the method disconnect () from your database class instance.
<?php
require_once 'DB.php';
$user = 'foo';
$pass = 'bar';
$host = 'localhost';
$db_name = 'clients_db';
// Data Source Name: This is the universal connection string
$dsn = "mysql://$user:$pass@$host/$db_name";
// DB::connect will return a PEAR DB object on success
// or an PEAR DB Error object on error
$db = DB::connect($dsn, true);
// Alternatively: $db = DB::connect($dsn);
// With DB::isError you can differentiate between an error or
// a valid connection.
if (DB::isError($db)) {
die ($db->getMessage());
}.
...
// You can disconnect from the database with:
$db->disconnect();
?>
VI-A-3 - Query
To perform a query against a database you have to use the function query(), that takes the query string as an
argument. On failure you get a DB Error object, check it with DB::isError(). On succes you get DB_OK (predefined
PEAR::DB constant) or when you set a SELECT-statment a DB Result object.
<?php
// Once you have a valid DB object...
$sql = "select * from clients";
$result = $db->query($sql);
// Always check that $result is not an error
if (DB::isError($result)) {
die ($result->getMessage());
}.
...
?>
- 54 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
VI-A-4 - Fetch
The DB_Result object provides two functions to fetch rows: fetchRow() and fetchInto(). fetchRow() returns the row,
null on no more data or a DB_Error, when an error occurs. fetchInto() requires a variable, which be will directly
assigned by reference to the result row. It will return null when result set is empty or a DB_Error too.
<?php
...
$db = DB::connect($dsn);
$res = $db->query("select * from mytable");
// Get each row of data on each iteration until
// there is no more rows
while ($row = $res->fetchRow()) {
$id = $row[0];
}
// Or:
// an example using fetchInto()
while ($res->fetchInto($row)) {
$id = $row[0];
} ?>
DB_FETCHMODE_ORDERED (default) : returns an ordered array. The order is taken from the select
statment.
<?php
$res = $db->query('select id, name, email from users');
$row = $res->fetchRow(DB_FETCHMODE_ORDERED);
/*
$row will contain:
array (
0 => <column "id" data>,
1 => <column "name" data>,
2 => <column "email" data>
)
*/
// Access the data with:
$id = $row[0];
$name = $row[1];
$email = $row[2];
?>
DB_FETCHMODE_ASSOC : returns an associative array with the column names as the array keys
<?php
$res = $db->query('select id, name, email from users');
$row = $res->fetchRow(DB_FETCHMODE_ASSOC);
/*
$row will contain:
array (
'id' => <column "id" data>,
'name' => <column "name" data>,
'email' => <column "email" data>
)
*/
- 55 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
- 56 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
$res_per_page = 10;
// the last row to fetch for this page
$to = $from + $res_per_page;
foreach (range($from, $to) as $rownum) {
if (!$row = $res->fetchrow($fetchmode, $rownum)) {
break;
}
$id = $row[0];
....
} ?>
getCol() returns an array with the data of the selected column. It accepts the column number to retrieve as the second
param.
$all_client_names = $db->getCol('select name from clients');
The above sentence could return for example: $all_client_names = array('Stig', 'Jon', 'Colin');
getAssoc() fetches the entire result set of a query and return it as an associative array using the
first column as the key.
- 57 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
The get*() family methods will do all the dirty job for you, this is: launch the query, fetch the data and free the result.
Please note that as all PEAR DB functions they will return a PEAR DB_error object on errors.
numRows(): Returns the total number of rows returned from a "SELECT" query.
// Number of rows
echo $res->numRows();
numCols(): Returns the total number of columns returned from a "SELECT" query.
// Number of cols
echo $res->numCols();
affectedRows(): Returns the number of rows affected by a data manipulation query ("INSERT", "UPDATE" or
"DELETE").
// remember that this statement won't return a result object
$db->query('DELETE * FROM clients');
echo 'I have deleted ' . $db->affectedRows() . ' clients';
tableInfo(): Returns an associative array with information about the returned fields from a "SELECT" query.
// Table Info
print_r($res->tableInfo());
- 58 Copyright 2004 - Serge Tah. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://tahe.developpez.com/web/php/mvc/