Web, php, internet, le blog de François Lasselin - Architecture : Le Design Pattern MVC en PHP - CommentairesLe Blog de François Lasselin2024-03-17T21:19:10+01:00François Lasselinurn:md5:e0972c13e2874e6ea2b3d8eb7465a242DotclearArchitecture : Le Design Pattern MVC en PHP - Outrageurn:md5:c161e01211cd16d92e4bb076310b6f1f2015-01-02T17:03:00+01:002015-01-02T09:03:00+01:00Outrage<p>WHAT IS THAT???<br />
.<br />
.<br />
$kind = $kind === 'assoc' ? $kind : 'row';<br />
eval('while(@$r = mysql_fetch_'.$kind.'($query)) array_push($result, $r);');<br />
.<br />
.<br />
Un ternaire et un eval() ???<br />
.<br />
.<br />
if($kind === 'assoc')<br />
{<br />
____while($r = mysql_fetch_assoc($query))<br />
________array_push($result, $r);<br />
}<br />
else<br />
{<br />
____while($r = mysql_fetch_row($query))<br />
________array_push($result, $r);<br />
}</p>Architecture : Le Design Pattern MVC en PHP - jpegfrurn:md5:1301118e53d72f5ca2e37b9e6e2b43032012-02-25T00:31:28+01:002012-02-25T12:56:20+01:00jpegfr<p>Bonjour,<br />
Surement une question de sémantique, mais pour moi la DAL est la couche d'accès aux données. C'est un terme architectural, alors que DAO est un patron de conception.<br />
In extenso, cela signifie que les DAO sont inclus dans la DAL.</p>
<p>La conf. de l'accès à la couche de persistance étant quant à elle implémenté dans les fabriques abstraites qui créent les fameux DAO.<br />
JP</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:d9cbceef996b622d76efde9cc398c3e92012-01-23T14:00:43+01:002012-01-23T14:00:58+01:00François Lasselin<p>Bonjour Lolo,</p>
<p>>pour un site web c'est lourdingue, ce qui est important c’est de
séparer au maximum les traitements des données de l’affichage de façon à
ce que </p>
<p>>comme dans le modèle MVC, la modification du traitement n’influe
pas sur la vue, et qu’il n’y ai qu’un seul point d’entrée.</p>
<p>D'abord, c'est une démarche saine de commencer par s'interroger sur ce qui est nécessaire ou pas et tu as raison : "ne pas s’accrocher à une
application stricte contre productive." on ne fait pas un MVC pour un script de 200 lignes. J'aurai tendance à prescrire le MVC pour des applications web (en opposition avec un site web mais la frontière est maigre). Mais il faut adapter ces outils à l'ouvrage à réaliser.</p>
<p>Sinon, séparer les traitement + point d'entrée unique > l'implémentation proposée dans ce billet ne propose rien de plus (avec une mise en œuvre objet sommaire...)</p>
<p><br />
> De plus avec l’intégration en plus des requêtes ajax, la séparation
strict devient à mon avis une source de complexité, voir pose des
problèmes </p>
<p>> insurmontables puisque parfois le contrôleur est de fait écrit
en javascript est donc intégré de fait à la vue. Fort de ce constat, il
faut garder les </p>
<p>>principes de base, et ne pas s’accrocher à une
application stricte contre productive.</p>
<p>Heu ... constat erroné: Aucun problème avec l'ajax, implémenté avec succès dans plusieurs projets basés sur l'implémentation décrite ici.</p>
<p>Après il y a différentes religions : ceux qui pense que le code xml fait partie de la vue et ceux qui pense que çe fait partie du modèle.</p>
<p>>le contrôleur est de fait écrit
en javascript est donc intégré de fait à la vue</p>
<p>Ici, on présente un pattern MVC poru le PHP. pas pour le javascript. </p>
<p>Cordialement,</p>
<p>François</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:5ee08f50e6eac11ac0d9db008eb5b8692012-01-23T13:46:47+01:002012-01-23T13:46:59+01:00François LasselinBonjour Loic,<br /><br />> il me semblait qu'il fallait séparer la DAL de la DAO (la config de la
BDD et les requêtes SQL étant exprimées dans la DAL, la description des
objets avec <br />> leurs GET/SET dans la DAO) ?<br /><br />Le découpage DAL / DAO serait pertinent dans le cas où on utiliserait un ORM (Object Relational Mapping ) dans lequel on retrouverait les 4 instructions CRUD. L'implémentation proposée dans le billet ne met pas en oeuvre d'ORM c'est pourquoi on ne trouve pas de get/set. L'ORM n'est pas une obligation, il serait même à déconseiller pour son impact négatif sur les performances.<br /><br />Cordialement,<br /><br />François<br /><br />Architecture : Le Design Pattern MVC en PHP - Loicurn:md5:05398cd70f8f78ad3d162451924676842012-01-22T14:50:11+01:002012-01-23T13:38:38+01:00Loic<p>Bonjour,<br />
merci pour cet exemple de modèle.</p>
<p>Cependant, j'ai du mal à comprendre la couche DAO :<br />
il me semblait qu'il fallait séparer la DAL de la DAO (la config de la BDD et les requêtes SQL étant exprimées dans la DAL, la description des objets avec leurs GET/SET dans la DAO) ?</p>
<p>Merci pour vos réponses :-)</p>Architecture : Le Design Pattern MVC en PHP - Lolourn:md5:fc9bacc19eeaf626ea9654a8534a7b262012-01-16T11:56:56+01:002012-01-20T10:31:41+01:00Lolo<p>Ouai, ben c'est trés bien si on développe un système d’exploitation, mais pour un site web c'est lourdingue, ce qui est important c’est de séparer au maximum les traitements des données de l’affichage de façon à ce que comme dans le modèle MVC, la modification du traitement n’influe pas sur la vue, et qu’il n’y ai qu’un seul point d’entrée.<br />
De plus avec l’intégration en plus des requetes ajax, la séparation strict devient à mon avis une source de complexité, voir pose des problèmes insurmontables puisque parfois le controleur est de fait écrit en javascript est donc intégré de fait à la vue. Fort de ce constat, il faut garder les principes de base, et ne pas s’accrocher à une application stricte contre productive.</p>Architecture : Le Design Pattern MVC en PHP - flakdepuurn:md5:dfa02ead055cf651b618b02a7df5ed442011-10-26T15:30:52+02:002011-10-27T11:16:18+02:00flakdepu<p>OK, pour ceux qui ont des problèmes du genre "rien ne s'affiche", il suffit de remplacer tous les "<?" par "<?php" dans le fichier "affichage.phtml" ! (suffisait de regarder les sources dans un navigateur pour se rendre compte que le code php n'était pas interprété).</p>
<p>Sinon, un grand merci pour ce petit exemple !</p>Architecture : Le Design Pattern MVC en PHP - QI Cuiturn:md5:bfc8b88a26d6da6a5ec4b8f4319ab3e82011-05-23T11:25:04+02:002011-06-02T19:44:59+02:00QI Cuit<p>Petit article sympa et très clair.</p>
<p>Toutefois, je voudrais suggérer deux-trois points pour étendre un peu le modèle et gérer les problèmes usuels, notamment la détermination du contexte (e.g. dans le cas de la redoutable utilisation du bouton "back").</p>
<p>Je m'explique avec un exemple : j'ai deux listes - des articles et des clients - dont chaque ligne est munie d'un bouton "Afficher" (?do=affichage), ce qui permet d'accéder, respectivement, à la fiche d'un article ou à celle d'un client.</p>
<p>Le bouton a une signification bien différente selon le contexte (avec éventuellement une gestion de droits : je n'ai peut-être pas le droit de voir les clients au même titre que les articles).</p>
<p>Donc, il est nécessaire de déterminer le contexte dont il est question :</p>
<p>[...]<br />
else {<br />
if ($_GET['contexte']=="liste_clients") {</p>
<p>if($_GET['do']=="affichage") {<br />
[...]<br />
}<br />
}<br />
else if ($_GET['contexte']=="liste_articles") {<br />
if($_GET['do']=="affichage") {<br />
[...]<br />
}<br />
}<br />
[...]</p>
<p>Bon, mon code est super lourdingue et devrait être remplacé par un fichier de paramétrage, avec un appel dynamique à la fonction qui va bien ;-)</p>
<p>L'avantage de gérer les choses de cette manière, c'est que même en jouant sur le bouton "back", le contexte est toujours explicitement disponible (il est donc difficile de ruser avec le système : en appliquant la gestion de droits sur le contexte, dans le Front Controller, il y a peu de place pour contourner le contrôle).</p>
<p>Sinon, on pourrait aussi résoudre le problème en appelant les actions différemment (disons, "?do=affichage_articles" et "?do=affichage_clients") mais ceci oblige à une conserver l'unicité des désignations dans toute l'application (!) et je ne trouve pas ça très élégant.</p>
<p>Qu'en dites-vous ?</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:be63a0d81b1c083009d280d8b305dd292011-02-24T17:17:33+01:002011-02-24T17:21:00+01:00François Lasselin<p>@efoenix : Oui, c'est normal. L'exemple se lance en complétant l'url : index.php<strong>?do=affichage</strong></p>Architecture : Le Design Pattern MVC en PHP - efoenixurn:md5:852082acaeef4b65c52495a1a0baee7f2011-02-24T16:18:15+01:002011-02-24T17:12:30+01:00efoenix<p>bonjour j'ai bien télécharger les sources, et malheureusement ca ne fonctionne pas ;<br />
- il manque le fichier "default.html"<br />
- Undefined index: do</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:58401e8244b2a71a675050a67e9221dd2011-01-20T15:51:51+01:002011-01-20T15:52:12+01:00François Lasselin<p>Coucou Tartiflette,</p>
<p>Le nom d'une variable interne à une fonction (en l'occurrence: return $all;) n'a pas besoin d'être réutilisé ailleurs pour le résultat de cette même fonction (<span class="re0">$data = $exampleDao->get_products();)</span>. Donc, j'ai du mal à suivre ton raisonnement.</p>
<p>Une lecture plus attentive du code (ou le téléchargement des sources complètes) te permettrait de voir que l'exemple fonctionne (cette implémentation fait tourner plusieurs sites actuellement en prod...). C'est un peu injuste de se défouler gratuitement sur cet article.</p>
<p>Cordialement,</p>Architecture : Le Design Pattern MVC en PHP - Tartifletteurn:md5:e9712b8934db7ccf100012e9e00e11b02011-01-06T12:06:52+01:002011-01-20T15:41:41+01:00Tartiflette<p>Pour ceux qui n'arrivent pas à voir les données, cela vient probablement du nom d'une variable.<br />
Le problème du pattern Bordel / Vue / Controleur c'est que très très rapidement on ne sait plus d'ou viennent les variables.<br />
En l'occurence ici c'est une variable appelée $all [ nom pas très explicite, malheureusement ] qui devient $data dans la vue.<br />
Le code ne peut donc pas fonctionner ; et je suis effaré par le nombre d'exemples qu'on peut trouver sur le web qui ne fonctionnent pas ; et je suis aussi étonné par les commentaires.<br />
A croire que la seule démonstration suffit ; que ça puisse fonctionner est secondaire. J'espère que vous n'achetez pas votre voiture sur le même principe !<br />
Sinon ; merci pour ce billet ; et un immense merci à Arimbourg qui propose un source QUI FONCTIONNE parfaitement et qui améliore le procédé.<br />
Bon code à tous.</p>Architecture : Le Design Pattern MVC en PHP - Thomas Burn:md5:1bc401dbd97062abe0706ae215f4f9592010-12-10T17:38:15+01:002010-12-12T11:19:41+01:00Thomas B<p>Très bien expliqué, droit au but. Merci !</p>Architecture : Le Design Pattern MVC en PHP - Arimbourgurn:md5:93262edd9603e87986905069d11cbece2010-10-26T16:16:53+02:002010-10-26T16:05:03+02:00Arimbourg<p>Bonjour François et les autres visiteurs,<br />
J'ai bien aimé ta manière de présenter MVC...<br />
Je me suis penché sur le problème précité. Le problème qu'il pourrait y avoir pour les personnes concernées doit venir de l'accès à la base de donnée. Si aucune erreur n'est reportée, ce doit être grâce au (à cause du...) @ qu'il y a dans ta boucle WHILE évaluée dans ta fonction "mysql_fetch_all". Je n'ai vu aucune autre possibilité d'erreur ailleurs dans le code. Kishin et Vincent devraient essayer le script en retirant cet "opérateur de contrôle d'erreur", comme on l'appelle... ils obtiendraient peut-être la réponse à leur problème vu que les possibles messages d'erreurs de cette expression ne seraient plus filtrés.</p>
<p>PS : Je me suis permis de retoucher le code, juste histoire d'avoir une sortie valide XHTML1.0 Strict et 2-3 autres choses au niveau du PHP ( <a href="http://hq.ariworld.eu/mvc" title="http://hq.ariworld.eu/mvc" rel="nofollow">http://hq.ariworld.eu/mvc</a> )</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:5df9de404688b1468a8f0d5dc66761142010-10-20T12:40:33+02:002010-10-20T11:40:47+02:00François Lasselin<p>Bonjour Vincent,</p>
<p>Peux tu m'envoyer tes coordonnées par le formulaire de contact ?</p>
<p>(j'ai encore tout retesté en réinstallant les sources du blog, ... ça marche)</p>
<p>Comme ça, on se contacte directement et on trouve ce qui bloque.</p>
<p>++</p>Architecture : Le Design Pattern MVC en PHP - vincent jurn:md5:905b2a67893a28eeefb89a41882b9fc52010-10-17T19:41:25+02:002010-10-20T11:38:22+02:00vincent j<p>J'ai le même souci que Kishin : Je n'affiche aucune donnée</p>Architecture : Le Design Pattern MVC en PHP - yrevesurn:md5:9af9ace03bc7bafc93f339ea2cc5e9372010-09-24T11:50:07+02:002010-10-04T11:29:13+02:00yreves<p>Merci.<br />
Un tuto simple et bien fait très pédagogique qui ne nous perd pas en disgressions!</p>Architecture : Le Design Pattern MVC en PHP - Kishinurn:md5:463b98afa1b7505a18b61cb90923995f2010-09-10T16:35:29+02:002010-09-12T18:22:24+02:00Kishin<p>Bien sur :D tout ceci est fait !<br />
J'accède aux données à partir d'autres scripts</p>Architecture : Le Design Pattern MVC en PHP - François Lasselinurn:md5:adf2af4bd93276b323254fa2c59362652010-09-10T15:40:55+02:002010-09-10T14:41:04+02:00François Lasselin<p>Est-ce que la base de données est créée ? </p>
<p>Y'a t'il bien des données dans la table ? </p>
<p>Est-ce que tu as modifié le fichier de connexion pour y mettre les paramètres de connexion à ta base ?</p>Architecture : Le Design Pattern MVC en PHP - Kishinurn:md5:80838346e209d1cb09f61d87af5067fe2010-09-10T10:38:27+02:002010-09-10T11:34:49+02:00Kishin<p>J'appelle bien cette même page cependant je n'ai aucun affichage de la BDD, seulement: "Nom : Prix : ".</p>
<p>De plus au début du script j'ai demandé l'affichage des erreurs (error_reporting(E_ALL);) mais rien n'y fait je n'ai pas d'erreurs.</p>