Académique Documents
Professionnel Documents
Culture Documents
Méthodologie de Développement
Méthodologie de Développement
Ce document propose une mthode de dveloppement d'applications Web/PHP respectant l'architecture MVC (Modle - Vue - Contrleur).
Mthodologie de dveloppement MVC d'une application PHP par Serge Tah (Cours et articles)
I - Utiliser l'architecture MVC dans les applications Web/PHP...................................................................................4 II - Une dmarche de dveloppement MVC en Web/PHP......................................................................................... 6 III - Un contrleur gnrique.....................................................................................................................................10 III-A - Introduction................................................................................................................................................ 10 III-B - Le fichier de configuration de l'application................................................................................................ 11 III-C - Les bibliothques inclure dans le contrleur..........................................................................................11 III-D - La gestion des sessions............................................................................................................................12 III-E - L'excution des actions............................................................................................................................. 12 III-F - L'enchanement des actions...................................................................................................................... 14 III-G - L'envoi de la rponse au client.................................................................................................................15 III-H - Dbogage.................................................................................................................................................. 16 III-I - Conclusion...................................................................................................................................................17 IV - Une application d'illustration.............................................................................................................................. 18 IV-A - Le problme.............................................................................................................................................. 18 IV-B - La base de donnes................................................................................................................................. 18 IV-C - L'architecture MVC de l'application...........................................................................................................19 IV-D - La classe d'accs aux donnes................................................................................................................19 IV-E - La classe de calcul de l'impt...................................................................................................................23 IV-F - Le fonctionnement de l'application............................................................................................................ 24 IV-G - Retour sur l'architecture MVC de l'application..........................................................................................27 IV-H - Le contrleur de l'application.................................................................................................................... 27 IV-I - Les actions de l'application web.................................................................................................................29 IV-J - Les tats de l'application web................................................................................................................... 29 IV-K - Le fichier config.php de configuration de l'application web.......................................................................30 IV-L - Les actions de l'application web................................................................................................................31 IV-L-1 - Fonctionnement gnral des scripts d'action....................................................................................31 IV-L-2 - L'action get:init.................................................................................................................................. 31 IV-L-3 - L'action post:calculerimpot................................................................................................................ 32 IV-L-4 - L'action get:effacerformulaire............................................................................................................ 33 IV-L-5 - L'action get:retourformulaire..............................................................................................................33 IV-M - L'enchanement d'actions invalide............................................................................................................ 34 IV-N - Les vues de l'application.......................................................................................................................... 35 IV-N-1 - Affichage de la vue finale.................................................................................................................35 IV-N-2 - Modle de la rponse...................................................................................................................... 36 IV-N-3 - La vue lmentaire v-bandeau.php..................................................................................................37 IV-N-4 - La vue lmentaire v-formulaire.php................................................................................................38 IV-N-5 - La vue lmentaire v-erreurs.php.................................................................................................... 38 IV-N-6 - La feuille de style............................................................................................................................. 39 IV-O - Les gnrateurs de vues..........................................................................................................................40 IV-O-1 - Rle d'un gnrateur de vue........................................................................................................... 40 IV-O-2 - Le gnrateur de vue associe l'tat [e-formulaire]......................................................................41 IV-O-3 - La vue associe l'tat [e-erreurs]................................................................................................. 42 IV-O-4 - Affichage de la vue finale................................................................................................................ 43 IV-P - Modifier le modle de rponse................................................................................................................. 43 IV-P-1 - Le nouveau modle..........................................................................................................................43 IV-P-2 - Les diffrentes pages rponse......................................................................................................... 44 IV-P-3 - Les vues lmentaires......................................................................................................................47 IV-P-4 - La feuille de style............................................................................................................................. 49 IV-P-5 - Le nouveau fichier de configuration................................................................................................. 49 IV-P-6 - Le gnrateur de vue associ l'tat [e-formulaire]........................................................................ 50 IV-P-7 - Le gnrateur de vue associ l'tat [e-erreurs]............................................................................ 51 V - Conclusion...........................................................................................................................................................52 VI - ANNEXE - PEAR DB.........................................................................................................................................53 VI-A - PEAR DB: a unified API for accessing SQL-databases........................................................................... 53 VI-A-1 - DSN.................................................................................................................................................. 53 VI-A-2 - Connect.............................................................................................................................................54 VI-A-3 - Query................................................................................................................................................ 54 VI-A-4 - Fetch................................................................................................................................................. 55
-2Copyright 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-a - Select the format of the fetched row....................................................................................... 55 VI-A-4-b - Set the format of the fetched row............................................................................................ 56 VI-A-4-c - Fetch rows by number............................................................................................................. 56 VI-A-4-d - Freeing the result set...............................................................................................................57 VI-A-4-e - Quick data retrieving................................................................................................................ 57 VI-A-4-f - Getting more information from query results............................................................................ 58
-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 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.
4 5
Une telle architecture est souvent appele "architecture 3-tier" ou 3 niveaux. L'interface utilisateur est souvent un navigateur web mais cela pourrait tre galement une application autonome qui via le rseau enverrait des requtes HTTP au service web et mettrait en forme les rsultats que celui-ci lui envoie. La logique applicative est constitue des scripts traitant les demandes de l'utilisateur, des classes mtier et d'accs aux donnes. La source de donnes est souvent une base de donnes mais cela peut tre aussi de simples fichiers plats, un annuaire LDAP, un service web distant,... Le dveloppeur a intrt maintenir une grande indpendance entre ces trois entits afin que si l'une d'elles change, les deux autres n'aient pas changer ou peu. L'architecture MVC est bien adapte des applications web crites avec des langages orients objet. Le langage PHP (4.x) n'est pas orient objet. On peut nanmoins faire un effort de structuration du code et de l'architecture de l'application afin de se rapprocher du modle 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)
les classes mtier, les classes d'accs aux donnes et la base de donnes les pages PHP le script PHP de traitement des requtes clientes, les scripts PHP [Action] de traitement des actions.
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)
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 : On dessinera l'aspect de la page On dterminera quelles sont les parties dynamiques de celle-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 peut rendre ce code dynamique en crivant : Cette composition de vues peut tre le format unique de la rponse faite l'utilisateur. Dans ce cas, chaque rponse au client devra fixer les trois URL charger dans les trois zones avant de faire afficher la page rponse. On peut gnraliser cet exemple en imaginant qu'il y ait plusieurs modles possibles pour la page de rponse. La rponse au client devra donc : Fixer le modle utiliser Fixer les lments (vues lmentaires) inclure dans celui-ci Demander l'affichage du modle
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)
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');
Deux actions sont prdfinies : enchainementinvalide actioninvalide cas o l'action en cours ne peut suivre l'action prcdente cas o l'action demande n'existe pas dans le dictionnaire des actions
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.
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 : D'envoyer l'utilisateur la vue prpare par le gnrateur [$scriptVue] D'enregistrer certaines informations dans la session De terminer l'excution du contrleur (exit)
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 trace permet d'afficher un message dans le flux html 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 : La gestion de la session (restauration, sauvegarde) La vrification de la validit des actions demandes L'excution du script associ l'action L'envoi au client de la rponse adapte l'tat rsultat de l'excution de l'action
- 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 On calcule son revenu imposable R=0.72*S o S est son salaire annuel On calcule son coefficient familial QF=R/nbParts On calcule son impt I. Considrons le tableau suivant :
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)
Le contrleur main.php sera le contrleur gnrique expos prcdemment 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 c-impots-calcul.php est la classe mtier permettant le calcul de l'impt
- 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 ?>
- 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)
// on dmarre ou reprend la session session_start(); $dSession=$_SESSION["session"]; if($dSession) $dSession=unserialize($dSession); // on rcupre l'action entreprendre $sAction=$_GET['action'] ? strtolower($_GET['action']) : 'init'; $sAction=strtolower($_SERVER['REQUEST_METHOD']).":$sAction"; // 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; // envoi de la rponse(vue) au client $sEtat=$dSession['etat']['principal']; $scriptVue=$dConfig['etats'][$sEtat]['vue']; include $scriptVue; // fin du script - on ne devrait pas arriver l sauf bogue trace ("Erreur de configuration."); trace("Action=[$sAction]"); trace("scriptAction=[$scriptAction]"); trace("Etat=[$sEtat]"); trace("scriptVue=[$scriptVue]"); trace ("Vrifiez que les script existent et que le script [$scriptVue] se termine par l'appel finSession."); exit(0); // --------------------------------------------------------------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 //-------------------------------------------------------------------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;
- 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 ?>
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)
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 :
tat [e-formulaire] : script e-formulaire.php tat [e-erreurs] : script e-erreurs.php
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" ); ?>
IV-L - Les actions de l'application web IV-L-1 - Fonctionnement gnral des scripts d'action
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)
// connexion la source de donnes dfinie par le dictionnaire $dDSN $oImpots=new impots_data($dDSN); if(count($oImpots->aErreurs)!=0) return array($oImpots->aErreurs); // rcupration des donnes limites, coeffr, coeffn list($limites,$coeffr,$coeffn)=$oImpots->getData(); // on se dconnecte $oImpots->disconnect(); // on rend le rsultat if(count($oImpots->aErreurs)!=0) return array($oImpots->aErreurs); else return array(array(),$limites,$coeffr,$coeffn); }//getData
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 urlstyle : URL de la feuille de style du modle vue1 : Nom du script charg de gnrer la vue vue1 vue2 : Nom du script charg de gnrer la vue vue2
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 titre : Titre afficher resultat : Montant de l'impt payer
- 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 : optoui : tat du bouton radio de nom [optoui] optnon : tat du bouton radio de nom [optnon] enfants : Nombre d'enfants placer dans le champ [txtenfants] salaire : Salaire annuel placer dans le champ [txtsalaire]
- 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 : erreurs : Tableau de messages d'erreurs info : Message d'information lien : Texte d'un lien href : URL cible du lien ci-dessus
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)
On remarquera que le gnrateur de vue respecte les conditions imposes un gnrateur de vue : Fixer dans $dReponse['vuereponse'] le modle de rponse utiliser Passer des informations ce modle. Ici elles sont passes par l'intermdiaire du dictionnaire $dReponse. Se terminer par l'appel la fonction finSession du contrleur
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'] : init : Le formulaire est affich vide calculimpot : Le formulaire est affich avec le montant de l'impt et les donnes qui ont amen son calcul retourformulaire : Le formulaire est affich avec les donnes initialement saisies
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.
Cette vue a deux lments dynamiques : 1 2 $dReponse['titre'] : Titre afficher $dReponse['resultat'] : Montant de l'impt payer
- 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>
Cette vue a les lments dynamiques suivants : $dReponse['liens'] : Tableau des liens afficher dans [vue2]. Chaque lment du tableau est un dictionnaire deux cls : 'url' : URL cible du lien 'texte' : Texte 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 : optoui : tat du bouton radio de nom optoui optnon : tat du bouton radio de nom optnon enfants : Nombre d'enfants placer dans le champ txtenfants salaire : Salaire annuel placer dans le champ txtsalaire
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)
Les parties dynamiques de cette vue dfinir par le gnrateur de vue sont associes aux cls suivantes du dictionnaire $dReponse : erreurs : Tableau de messages d'erreurs info : Message d'information
- 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)
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.
Les principales modifications sont les suivantes : le gnrateur de vue indique qu'il veut utiliser le modle de rponse modele2 pour cette raison il renseigne les lments dynamiques $dReponse['vue1'], $dReponse['vue2'], $dReponse['vue3'] tous trois ncessaires au modle de rponse modele2. le gnrateur renseigne galement l'lment dynamique $dReponse['liens'] qui fixe les liens afficher dans la zone [vue2] de la 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_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)
// Access the data with: $id = $row['id']; $name = $row['name']; $email = $row['email']; ?>
- 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)
$data = getAssoc('SELECT name, surname, phone FROM mytable') /* Will return: array( 'Peter' => array('Smith', '944679408'), 'Tomas' => array('Cox', '944679408'), 'Richard' => array('Merz', '944679408') ) */
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.
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/