Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5447 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  58  59  60  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1999885
skeye
Posté le 08-06-2010 à 13:40:04  profilanswer
 

Reprise du message précédent :
C'est un peu le problème que j'ai vu dans la plupart des couches d'abstration DB - dès que que le mapping DB/classes n'est pas direct c'est le merdier...
Si c'est un "nouveau projet" et que ton ORM te permet de générer la base de données pas de gros problèmes, tu décris ton truc à fond via la syntaxe de l'ORM et basta, mais si tu pars d'une base existante tu te retrouves à devoir re-décrire explicitement un paquet de trucs pour que ta couche d'abstraction ne fasse pas de la merde...


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 08-06-2010 à 13:40:04  profilanswer
 

n°1999898
theredled
● REC
Posté le 08-06-2010 à 14:26:16  profilanswer
 

MEI a écrit :


Sauf si c'est un ORM qui n'en est pas un, une fois l'ORM "config" pour la classe ne question (que ce soit via un INI, un XML ou des propriétés de la classe, etc.), l'utilisation est souvent identique :
- des méthodes d'instances simple pour le Create/Update/Remove/Delete.
- des méthodes de classes permettant de "requêter". (JDOQL/HQL & co quoi en gros...)
 
Après quelque soit l'ORM, sauf dans des situations complexes et rares, ça change pas fondamentalement grand chose niveau code à écrire.


Oui, mais je ne défendais pas Doctrine spécifiquement quand je parlais de vitesse de codage, plus des ORMs en général (en l'occurence, Doctrine VS pas d'ORM).
 
Sinon c'est "Retrieve", pas remove  [:la_mouche]  
 

MEI a écrit :

Pour en revenir à Doctrine, si t'as une classe UNIQUE qui provient de PLUSIEURS tables via une requête (cas des héritages de classes), ça ne fonctionne pas. C'est pourtant ce qui doit être fait lorsque l'on suit la méthodologie MERISE lorsque l'on réalise le MPD. Doctrine ne sait mapper le contenu d'un objet que s'il provient d'une unique table. D'où l'attente forte pour Doctrine 2.x.


Ouais, enfin ça reste des cas spécifiques quoi.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1999900
MEI
|DarthPingoo(tm)|
Posté le 08-06-2010 à 14:31:27  profilanswer
 

L'héritage un cas spécifique :??:
 
Sérieusement, l'héritage c'est ultra courant en POO... Je sais pas, c'est la base...


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1999905
skeye
Posté le 08-06-2010 à 14:37:31  profilanswer
 

theredled a écrit :


Ouais, enfin ça reste des cas spécifiques quoi.


lulz. C'est pas parce-que tu bosses sur des projets au modèle simpliste que c'est le cas général.[:doc petrus]


---------------
Can't buy what I want because it's free -
n°1999906
skeye
Posté le 08-06-2010 à 14:38:32  profilanswer
 

MEI a écrit :

L'héritage un cas spécifique :??:
 
Sérieusement, l'héritage c'est ultra courant en POO... Je sais pas, c'est la base...


Oui enfin c'est pas parce-que t'as de l'héritage dans les classes de ton modèle que ça veut dire que c'est compliqué à mettre en place systématiquement non plus hein.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1999907
theredled
● REC
Posté le 08-06-2010 à 14:38:48  profilanswer
 

MEI a écrit :

L'héritage un cas spécifique :??:
 
Sérieusement, l'héritage c'est ultra courant en POO... Je sais pas, c'est la base...


Ton problème ne se passe que dans 1 mode d'héritage de Doctrine sur 3...
 
J'ai construit une grosse centaine de modèles avec Doctrine et j'ai jamais eu besoin de concrete inheritance... Je dis pas que ce soit jamais utile bien sûr, mais oui ça reste un cas spécifique.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2000183
caribouuu
Posté le 09-06-2010 à 12:35:57  profilanswer
 

skeye a écrit :

Aucune cohérence dans le nommage des fichiers/classes, contraintes sur le nommage des tables ([:el g]) et pour des noms de tables au pluriel en plus.
Bref, [:w3c compliant]

 

Dans 2 semaines je vais travailler en entreprise sur cakephp, là je suis en train de découvrir le système des MVC, je galère pas mal...

 

Je comprends pas ta remarque, pourquoi c'est gênant par exemple que le nom des controllers corresponde au nom des tables (les deux au pluriel) et corresponde au nom du model, qui est au singulier.

 

J'en avais déduis que (attention, grosse simplification), model=objet ou instance et controller=class d'où le pluriel vu que ça comporte plusieurs objets, contenus dans la table correspondante, c'est erroné?

 

(je viens juste de finir le tutoriel du blog :D )

Message cité 2 fois
Message édité par caribouuu le 09-06-2010 à 12:38:06

---------------
Bla (blaa bbla)
n°2000184
masklinn
í dag viðrar vel til loftárása
Posté le 09-06-2010 à 12:39:46  profilanswer
 

caribouuu a écrit :

Dans 2 semaines je vais travailler en entreprise sur cakephp, là je suis en train de découvrir le système des MVC, je galère pas mal...
 
Je comprends pas ta remarque, pourquoi c'est gênant par exemple que le nom des controllers corresponde au nom des tables (les deux au pluriel) et corresponde au nom du model, qui est au singulier.


Parce qu'une méthode donnée d'un controller peut parfaitement impliquer plus d'un modèle, la relation entre les controller et les modèles est n-n, pas 1-1.

caribouuu a écrit :

J'en avais déduis que (attention, grosse simplification), model=objet ou instance et controller=class d'où le pluriel vu que ça comporte plusieurs objets, contenus dans la table correspondante, c'est erroné?


Complètement [:pingouino]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2000188
caribouuu
Posté le 09-06-2010 à 12:44:35  profilanswer
 

masklinn a écrit :


Parce qu'une méthode donnée d'un controller peut parfaitement impliquer plus d'un modèle, la relation entre les controller et les modèles est n-n, pas 1-1.


 
Ah ok je vois, oui vu comme ça ça peut paraître bizar/
 

Citation :

Complètement [:pingouino]


 
Arf
 
Je précise que quand j'écris model=objet... c'est pas exactement ce que je veux dire, mais plutôt que un model travaille avec 1 objet de la table à la fois, d'où le singulier, alors que le controller gère tous les objets, d'où le pluriel... c'est encore erroné?


---------------
Bla (blaa bbla)
n°2000189
MEI
|DarthPingoo(tm)|
Posté le 09-06-2010 à 12:52:15  profilanswer
 

En Zend Framework, y'a pas de convention particulière sur le nom du controlleur...
 
Souvent j'utilise le singulier perso.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
mood
Publicité
Posté le 09-06-2010 à 12:52:15  profilanswer
 

n°2000190
theredled
● REC
Posté le 09-06-2010 à 12:52:58  profilanswer
 

caribouuu a écrit :


 
Ah ok je vois, oui vu comme ça ça peut paraître bizar/
 

Citation :

Complètement [:pingouino]


 
Arf
 
Je précise que quand j'écris model=objet... c'est pas exactement ce que je veux dire, mais plutôt que un model travaille avec 1 objet de la table à la fois, d'où le singulier, alors que le controller gère tous les objets, d'où le pluriel... c'est encore erroné?


Oui. Si tu fais quoique ce soit avec la BDD, ça doit être dans la couche modèle.
 
La couche controller, ça n'a rien à voir avec la BDD (elle ne doit même pas connaitre son existence).


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2000191
theredled
● REC
Posté le 09-06-2010 à 12:56:20  profilanswer
 

MEI a écrit :

En Zend Framework, y'a pas de convention particulière sur le nom du controlleur...
 
Souvent j'utilise le singulier perso.


Disons que c'est plus logique d'avoir un nom de base "Bicycle" et d'appeller sa collection BicycleCollection, plutôt qu'un nom de base Bicycles qui corresponde à une collection et d'appeler l'objet BicyclesObject...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2000193
caribouuu
Posté le 09-06-2010 à 13:02:32  profilanswer
 

theredled a écrit :


Oui. Si tu fais quoique ce soit avec la BDD, ça doit être dans la couche modèle.
 
La couche controller, ça n'a rien à voir avec la BDD (elle ne doit même pas connaitre son existence).


 
ok ! ça fait sens, donc la convention qui veut que le nom d'un controller corresponde au nom d'une table (sans quoi ce n'est pas d'un controller mais d'un component dont on a besoin dixit cakephp), ça a juste à voir avec le fonctionnement interne de cakephp, ya pas de signification particulière à y voir coté utilisateur.
 
 


---------------
Bla (blaa bbla)
n°2000196
skeye
Posté le 09-06-2010 à 13:14:26  profilanswer
 

caribouuu a écrit :


Je comprends pas ta remarque, pourquoi c'est gênant par exemple que le nom des controllers corresponde au nom des tables (les deux au pluriel) et corresponde au nom du model, qui est au singulier.
 
J'en avais déduis que (attention, grosse simplification), model=objet ou instance et controller=class d'où le pluriel vu que ça comporte plusieurs objets, contenus dans la table correspondante, c'est erroné?


 
[:montgomery burns]


---------------
Can't buy what I want because it's free -
n°2000199
theredled
● REC
Posté le 09-06-2010 à 13:29:27  profilanswer
 

caribouuu a écrit :


 
ok ! ça fait sens, donc la convention qui veut que le nom d'un controller corresponde au nom d'une table (sans quoi ce n'est pas d'un controller mais d'un component dont on a besoin dixit cakephp), ça a juste à voir avec le fonctionnement interne de cakephp, ya pas de signification particulière à y voir coté utilisateur.
 
 


Non. Par ex dans symfony ya pas de ça, c'est toi qui crée tes action controllers et les organise comme tu veux.
 
Après forcément ya une sorte de logique à calquer les controllers sur la couche modèle, mais c'est pas obligé.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2000201
skeye
Posté le 09-06-2010 à 13:31:16  profilanswer
 

theredled a écrit :

Après forcément ya une sorte de logique à calquer les controllers sur la couche modèle


Non.:o


---------------
Can't buy what I want because it's free -
n°2000203
caribouuu
Posté le 09-06-2010 à 13:32:45  profilanswer
 


 
Je suis à coté de la plaque je crois  :sweat:  Je vais faire des tutoriels, bidouiller, et moins théoriser, juste accepter les conventions comme elles sont, ça me réussira ptet mieux.  :o


---------------
Bla (blaa bbla)
n°2000204
caribouuu
Posté le 09-06-2010 à 13:33:13  profilanswer
 

theredled a écrit :


Non. Par ex dans symfony ya pas de ça, c'est toi qui crée tes action controllers et les organise comme tu veux.
 
Après forcément ya une sorte de logique à calquer les controllers sur la couche modèle, mais c'est pas obligé.


 
ok :jap:


---------------
Bla (blaa bbla)
n°2000235
Skateinmar​s
Posté le 09-06-2010 à 14:23:20  profilanswer
 

caribouuu a écrit :


 
ok ! ça fait sens, donc la convention qui veut que le nom d'un controller corresponde au nom d'une table (sans quoi ce n'est pas d'un controller mais d'un component dont on a besoin dixit cakephp), ça a juste à voir avec le fonctionnement interne de cakephp, ya pas de signification particulière à y voir coté utilisateur.


 
On est pas obligé de suivre cette convention tout pourrie de cake, j'imagine qu'ils font ca pour faire "RESTful"


---------------
Feedback HAV
n°2028139
koskoz
They see me trollin they hatin
Posté le 10-10-2010 à 19:14:43  profilanswer
 

J'ai un controlleur "news". J'aimerai pouvoir lister toutes les news pour les visiteurs, mais aussi pour les admins avec des options différentes.
 
Je suis sensé faire quoi, une seule méthode avec des if dans tous les sens, deux méthodes différentes ou alors j'ai une classe pour tout ce qui est admin de news et une autre pour le reste ?
 
Pour l'instant je suis partie sur l'option 2.


---------------
Twitter
n°2028142
boblenain2​00
Posté le 10-10-2010 à 19:38:54  profilanswer
 

Option 1 amha (enfin çà dépend si ca te semble plus une page news + qql options pour admin, ou si c'est plus du tout le même objectif)

n°2028143
theredled
● REC
Posté le 10-10-2010 à 19:43:36  profilanswer
 

koskoz a écrit :

J'ai un controlleur "news". J'aimerai pouvoir lister toutes les news pour les visiteurs, mais aussi pour les admins avec des options différentes.

 

Je suis sensé faire quoi, une seule méthode avec des if dans tous les sens, deux méthodes différentes ou alors j'ai une classe pour tout ce qui est admin de news et une autre pour le reste ?

 

Pour l'instant je suis partie sur l'option 2.


Au plus pratique.

Message cité 1 fois
Message édité par theredled le 10-10-2010 à 19:43:58

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2028154
MEI
|DarthPingoo(tm)|
Posté le 10-10-2010 à 21:03:47  profilanswer
 

koskoz a écrit :

J'ai un controlleur "news". J'aimerai pouvoir lister toutes les news pour les visiteurs, mais aussi pour les admins avec des options différentes.
 
Je suis sensé faire quoi, une seule méthode avec des if dans tous les sens, deux méthodes différentes ou alors j'ai une classe pour tout ce qui est admin de news et une autre pour le reste ?
 
Pour l'instant je suis partie sur l'option 2.


Même contrôleur, sauf que dans le modèle soit tu te base sur le profil de session pour savoir si c'est en visiteur ou admin, soit tu fais du if else... sachant qu'en principe tu devrais avoir un truc du genre :

Code :
  1. if (Model_User_Profile::getInstance()->isAdmin()) {
  2. // code spécifique  
  3. };
  4. // code commun


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2028155
MEI
|DarthPingoo(tm)|
Posté le 10-10-2010 à 21:04:26  profilanswer
 

theredled a écrit :


Au plus pratique.


Ca c'est le raisonnement qui reviens a dire, faire du code de merde, ce n'est pas grave... :spamafote:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2028156
theredled
● REC
Posté le 10-10-2010 à 21:12:58  profilanswer
 

MEI a écrit :


Ca c'est le raisonnement qui reviens a dire, faire du code de merde, ce n'est pas grave... :spamafote:


Du code de merde, c'est pas pratique.
Ce que je voulais dire c'est qu'il n'y a pas de "bonne pratique" admise pour ça, c'est selon.

 

Par ex ta solution est bien, sauf si la part d'éléments différents est plus grande que celle d'éléments communs, auquel il faut largement mieux factoriser dans l'autre sens (faire 2 pages séparées et factoriser dans des méthodes/templates les éléments communs).


Message édité par theredled le 10-10-2010 à 21:13:10

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°2028170
masklinn
í dag viðrar vel til loftárása
Posté le 10-10-2010 à 22:08:49  profilanswer
 

koskoz a écrit :

J'ai un controlleur "news". J'aimerai pouvoir lister toutes les news pour les visiteurs, mais aussi pour les admins avec des options différentes.
 
Je suis sensé faire quoi, une seule méthode avec des if dans tous les sens, deux méthodes différentes ou alors j'ai une classe pour tout ce qui est admin de news et une autre pour le reste ?
 
Pour l'instant je suis partie sur l'option 2.


Ça serait quoi les différences entre user et admin? Et elle s'exprimerait à combien d'endroits? Tes modèles sont goupillés comment, t'as un type différent pour les admins ou pas?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2028173
koskoz
They see me trollin they hatin
Posté le 10-10-2010 à 22:19:02  profilanswer
 

masklinn a écrit :


Ça serait quoi les différences entre user et admin? Et elle s'exprimerait à combien d'endroits? Tes modèles sont goupillés comment, t'as un type différent pour les admins ou pas?


 
Les différences qui me viennent sans trop de réflexion :

  • template différente
  • données passées pas exactement les mêmes


Il y a uniquement deux pages pour lister les news, une pour les admins, une sur le front.
 
J'ai un modèle pour les news.
 
Juste un type User avec une propriete admin à true ou false.


---------------
Twitter
n°2028175
masklinn
í dag viðrar vel til loftárása
Posté le 10-10-2010 à 22:22:50  profilanswer
 

koskoz a écrit :


 
Les différences qui me viennent sans trop de réflexion :

  • template différente
  • données passées pas exactement les mêmes


Il y a uniquement deux pages pour lister les news, une pour les admins, une sur le front.
 
J'ai un modèle pour les news.
 
Juste un type User avec une propriete admin à true ou false.


Colles juste quelques conditions dans le controller et/ou template.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2028176
koskoz
They see me trollin they hatin
Posté le 10-10-2010 à 22:24:23  profilanswer
 

:jap:


---------------
Twitter
n°2028184
MEI
|DarthPingoo(tm)|
Posté le 10-10-2010 à 23:29:23  profilanswer
 

masklinn a écrit :


Colles juste quelques conditions dans le controller et/ou template.


En pratique, le controlleur doit choisir la vue qui va bien, mais tout le reste c'est au modèle de se débrouiller.
Et encore que si la présentation est différente.
 
En gros dans le cas classique on devrais avoir un truc du genre dans le contrôleur, après pour le fetch, si l'admin vois pas les mêmes news qu'un visiteur (i.e. genre il vois des brouillons), c'est au modèle de gérer ça.

Code :
  1. public function newsAction() {
  2.     $this->view->news = Model_News::getNewsUser($session->user);
  3.    
  4.     if ($session->user->isAdmin()) {
  5.         $this->_helper->viewRender->setView('newsAdmin.phtml');
  6.     }
  7. }


 
Et donc après, deux vues, une pour chaque cas, si vraiment c'est très différent en formatage.

Message cité 1 fois
Message édité par MEI le 10-10-2010 à 23:29:33

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2028186
masklinn
í dag viðrar vel til loftárása
Posté le 10-10-2010 à 23:46:14  profilanswer
 

MEI a écrit :


En pratique, le controlleur doit choisir la vue qui va bien, mais tout le reste c'est au modèle de se débrouiller.
Et encore que si la présentation est différente.

 

En gros dans le cas classique on devrais avoir un truc du genre dans le contrôleur, après pour le fetch, si l'admin vois pas les mêmes news qu'un visiteur (i.e. genre il vois des brouillons), c'est au modèle de gérer ça.

Code :
  1. public function newsAction() {
  2.     $this->view->news = Model_News::getNewsUser($session->user);
  3.    
  4.     if ($session->user->isAdmin()) {
  5.         $this->_helper->viewRender->setView('newsAdmin.phtml');
  6.     }
  7. }
 

Et donc après, deux vues, une pour chaque cas, si vraiment c'est très différent en formatage.


Et tu te retrouves avec 200 lignes au lieu de 20 pour arriver au même résultat. Fuck everything about that, Rube Goldberg est mort depuis 40 ans.

 

Accessoirement tu devrais rajouter des indirections, c'est beau, utile et ça coûte rien.


Message édité par masklinn le 10-10-2010 à 23:47:18

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2028198
MEI
|DarthPingoo(tm)|
Posté le 11-10-2010 à 01:22:25  profilanswer
 

Soit on fait du MVC et c'est pour une bonne raison (à priori des bonnes vu qu'on réfléchis à ça au début du projet), et on le fait proprement, soit on ne le fait pas. :spamafote:
 
En plus ma solution, ne dupliquerai aucun code métier, et donc ne demande pas plus de code qu'une solution moins "MVC" (bien au contraire). Seule la vue est dupliquée, et là encore, soit on a >50% du code qui est commun et on ne fait qu'une vue, soit on en fait deux pour être propre.
 
Et une 3e solution est toujours possible avec une vue principale qui fait des render de vue partielle en fonction du profil.
 
Exemple :  

Code :
  1. <div class="news">
  2.     <div class="title">$news->getTitle()</div>
  3.     <div class="body">$news->getBody()</div>
  4.     <? if ($user->isAdmin()) : ?>
  5.     <?= $this->render('news-actionbuttons-admin.phtml') ?>
  6.     <? else : ?>
  7.     <?= $this->render('news-actionbuttons.phtml') ?>
  8.     <? endif ?>
  9. </div>


 
Après je sais pas trop comme les données sont fetch et tout, mais le modèle pourrais très bien se résumé à ça :

Code :
  1. public static function getNewsUser(Model_User $user) {
  2.     $result = null;
  3.     try {
  4.         $dbTable = new Model_DbTable_News();
  5.         $select = $dbTable()->select()
  6.                             ->where('ACTIVE = ?',  $user->isAdmin())
  7.                             ;
  8.         $result = $dbTable->fetchAll($select);
  9.     } catch Exception ($e) {
  10.         //
  11.     }
  12.     return $result;
  13. }


 
Wahhouuuu, 15 lignes de code pour fetch, et franchement, a moins d'avoir un requête relativement complexe avec des jointure différentes suivant le type de profil, on ne devrait pas dépasser les 50 lignes pour ça, gestion des erreurs/logs compris.

Message cité 2 fois
Message édité par MEI le 11-10-2010 à 01:24:20

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2028217
masklinn
í dag viðrar vel til loftárása
Posté le 11-10-2010 à 07:55:55  profilanswer
 

MEI a écrit :

Soit on fait mon MVC et c'est moi qui décide, et on le fait comme je veux, soit on ne le fait pas. :spamafote:


ftfy.

Message cité 1 fois
Message édité par masklinn le 11-10-2010 à 07:57:17

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2028227
skeye
Posté le 11-10-2010 à 08:26:56  profilanswer
 

MEI a écrit :


 
Et une 3e solution est toujours possible avec une vue principale qui fait des render de vue partielle en fonction du profil.


 
oh oui bonne idée, allons mettre de la logique métier dans la vue.[:pingouino]
 
Si ta liste de news est différente suivant le profil de ton utilisateur, c'est que le modèle a besoin de connaitre le type utilisateur pour t'en renvoyer la liste, point barre.:o


---------------
Can't buy what I want because it's free -
n°2028300
MEI
|DarthPingoo(tm)|
Posté le 11-10-2010 à 11:24:12  profilanswer
 

skeye a écrit :


Si ta liste de news est différente suivant le profil de ton utilisateur, c'est que le modèle a besoin de connaitre le type utilisateur pour t'en renvoyer la liste, point barre.:o


J'ai pas dit le contraire... :spamafote:
 
Mais après ça dépends la présentation de ta news suivant le contexte. Si t'as qu'un bouton "Edit" en plus, à priori tu ne va pas faire 2 vues différentes. Et ce n'est pas le modèle qui génère le HTML de sortie, donc de toutes façons c'est pas la dedans qu'on pourra gérer une présentation différente entre un visiteur et un administrateur.
 
C'était pour noter qu'on pouvais factoriser une partie de la vue.
 
Mais on aurai pu avoir deux vue différente avec un "render('news-commun.phtml')" si tu préfères.


Message édité par MEI le 11-10-2010 à 11:24:48

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2028301
MEI
|DarthPingoo(tm)|
Posté le 11-10-2010 à 11:30:10  profilanswer
 


C'est juste un peu la première règle en MVC le : " fat models, skinny controllers "...  :sarcastic:  
 
Après on peut avoir un contrôleur de 5000 lignes de code avec 500 lignes par actions à gros coup de conditions à tout bout de champs, mais là on ne fait plus du MVC...


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2029517
stef_dober​mann
Personne n'est parfait ...
Posté le 15-10-2010 à 11:16:09  profilanswer
 

désolé mais je n'ai pas tout lu ( 59 pages ca commence à faire )
actuellement je suis en train de développer mon "propre" MVC j'ai presque fini, mais je me pose encore une question:
pose du problème : certaine des actions commandées par le client font appel à d'autres informations provenant d'autre classe.
mais voila je ne sais pas comment faire ?
actuellement le client arrive sur l'application par l'adresse exemple : www.exemple.com/gestion_user_edit_1.html
mon contrôleur analyse l'URL et déduit qu'il faut appeler le MultiActionControler user et lancer la méthode edit sur l'id 1
La méthode edit sélectionne la vue puis le contrôleur reprend la main et lance la vue en lui passant les données.
si maintenant je veux faire afficher en plus de l'utilisateur ses droits, je doit dans ce cas utiliser le MultiActionControler droit mais je ne sais pas comment faire?
dois-je rappeler mon contrôleur pour lui faire charger les données ou le faire directement dans le MultiActionControler de la table user ou existe-t-il une autre méthode que j'ignore ?


---------------
Tout à commencé par un rêve...
n°2029528
skeye
Posté le 15-10-2010 à 11:25:26  profilanswer
 

Difficile de te répondre, là...je n'ai pas la moindre idée de ce que tu entends par "MultiActionControler" - encore moins quand il y a à la fois controler dans le nom, et que tu l'associes à une table.


---------------
Can't buy what I want because it's free -
n°2029533
stef_dober​mann
Personne n'est parfait ...
Posté le 15-10-2010 à 11:32:15  profilanswer
 

j'ai créé ce que j'appel un MultiActionControler  
en faite c'est ce que FlorentG appel dans son premier poste class UserController
c'est une classe qui va s'occuper de traiter la demande de l'internaute
il pourrait ressembler à ça :

Code :
  1. class UserController {
  2.   function run() {
  3.     switch($_GET['action']) {
  4.       case 'add':
  5.          $model = new UserModel();
  6.          $model->add_user($_POST['name'], $_POST['age']);
  7.  
  8.          $view = new UserAddedView($model); // Vue lorsqu'un utilisateur a été ajouté
  9.          $view->render();
  10.          break;
  11.      case 'list':
  12.          $model = new UserModel();
  13.          $view = new UserListView($model);
  14.          $view->render();
  15.          break;
  16.    }
  17.   }
  18. }


Message édité par stef_dobermann le 15-10-2010 à 11:32:31

---------------
Tout à commencé par un rêve...
n°2029535
skeye
Posté le 15-10-2010 à 11:35:57  profilanswer
 

Si ton contrôleur doit permettre de visualiser/modifier les droits de ton utilisateur, je vois pas pourquoi il irait pas les chercher tout seul comme un grand.
Ta question me donne l'impression que dans ton esprit tu lies beaucoup trop ton contrôleur à ton modèle.


---------------
Can't buy what I want because it's free -
n°2029543
stef_dober​mann
Personne n'est parfait ...
Posté le 15-10-2010 à 12:01:19  profilanswer
 

a bon, pourtant mon model est tout à fait indépendant du reste.
je suis partis du principe d'un CRUD sur chaque table pour le multiActionControler
et j'ai un model (accès à la base données) qui pour chaque multiActionControler et action établie un requete SQL.
 
Fonctionnement de mon contrôleur :
Le controleur ce charge d'analyser l'URL, de définir une route par défaut (si nécessaire) charger le bon multiActionControler, vérifier la présence de la méthode demander et si elle existe la lance (si elle n'est pas trouvé chargement de la méthode par défaut).
Le controleur instancie aussi une classe de retour appelé ModelAndView, qui contient les données en provenance du model (mais qui est initialisé par le multiActionControler) et la vue à charger qui a été initialisé par le multiActionControler.
La méthode render du controleur analyse la classe ModelAndView et génère la sortie.
 
voila pour le fonctionnement.


---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  58  59  60  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)