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

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  43  44  45  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1727247
wrksx
Posté le 01-05-2008 à 14:10:56  profilanswer
 

Reprise du message précédent :
rien, quand j'en saurai plus je serai peut être a même de poser des question pertinentes. salut

mood
Publicité
Posté le 01-05-2008 à 14:10:56  profilanswer
 

n°1727260
theredled
● REC
Posté le 01-05-2008 à 15:01:26  profilanswer
 

drasche a écrit :


Tu peux détailler? [:pingouino]


J'ai une classe "panier" dans la session, sans BDD derrière.
 
(en fait c'est pas complètement vrai, c'est pour comprendre :o)


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1727262
drasche
Posté le 01-05-2008 à 15:14:32  profilanswer
 

theredled a écrit :

J'ai une classe "panier" dans la session, sans BDD derrière.
 
(en fait c'est pas complètement vrai, c'est pour comprendre :o)


Ben perso je foutrais le panier en DB, ça permet à l'utilisateur de conserver son panier entre deux sessions ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1727270
theredled
● REC
Posté le 01-05-2008 à 15:58:57  profilanswer
 

drasche a écrit :


Ben perso je foutrais le panier en DB, ça permet à l'utilisateur de conserver son panier entre deux sessions ;)


C'est le cas, mais seulement si il est loggé :jap:
(Du coup, la BDD n'est qu'un accessoire de sauvegarde et la logique joue principalement sur la session)

Message cité 1 fois
Message édité par theredled le 01-05-2008 à 16:01:31

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1727273
masklinn
í dag viðrar vel til loftárása
Posté le 01-05-2008 à 16:04:02  profilanswer
 

theredled a écrit :


C'est le cas, mais seulement si il est loggé :jap:
(Du coup, la BDD n'est qu'un accessoire de sauvegarde et la logique joue principalement sur la session)


S'il est pas loggé tu crées un user temporaire associé à sa session, et tu bind son panier à ce user [:spamafote]

Message cité 1 fois
Message édité par masklinn le 01-05-2008 à 16:23:10

---------------
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°1727280
theredled
● REC
Posté le 01-05-2008 à 16:28:58  profilanswer
 

masklinn a écrit :


S'il est pas loggé tu crées un user temporaire associé à sa session, et tu bind son panier à ce user [:spamafote]


Et ça m'apporte quoi de plus que de le mettre en session, à part de moins bonnes perfs et un design plus compliqué ?

Message cité 1 fois
Message édité par theredled le 01-05-2008 à 16:29:35

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1727281
masklinn
í dag viðrar vel til loftárása
Posté le 01-05-2008 à 16:36:32  profilanswer
 

theredled a écrit :


Et ça m'apporte quoi de plus que de le mettre en session, à part de moins bonnes perfs et un design plus compliqué ?


L'unification de la gestion du panier (et du reste d'ailleurs) entre un user identifié et un user "anonyme".

 

edit: et la seule complication au design, il est au niveau de la considération/identification de l'utilisateur (qui est normalement indépendant du reste), tout le reste de l'application se trouve simplifié, puisqu'on se retrouve avec un utilisateur dans tous les cas.


Message édité par masklinn le 01-05-2008 à 16:38:03

---------------
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°1727283
theredled
● REC
Posté le 01-05-2008 à 16:45:45  profilanswer
 

Ya aussi qu'il me faut créer un système d'utilisateurs "temporaires", et les vidages de tables réguliers etc que ça impose...


Message édité par theredled le 01-05-2008 à 16:47:09

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1728251
vanadium
N° Atomique : 23
Posté le 04-05-2008 à 19:07:23  profilanswer
 

Franchement, faire de l'unification au prix d'un code plus compliqué, pas question à mon sens. Par contre, avoir des algorithmes adaptés aux besoins et à la situation, je suis 100% d'accord. Unifier, oui, mais avec modération :jap:

n°1729436
supermofo
Hello World !
Posté le 07-05-2008 à 11:44:25  profilanswer
 

FlorentG a écrit :

Y'a Savant par exemple, qui gère en plus des plugins & filters. Manque juste le caching, et c'est avec bonheur que je l'utilise


Tout ce que fait pmjones est du bonheur. D'ailleurs si t'as le temps, jette un coup d'oeil sur son package Modele.
 
 
 :hello:


---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
mood
Publicité
Posté le 07-05-2008 à 11:44:25  profilanswer
 

n°1729451
FlorentG
Posté le 07-05-2008 à 12:16:28  profilanswer
 

supermofo a écrit :

Tout ce que fait pmjones est du bonheur. D'ailleurs si t'as le temps, jette un coup d'oeil sur son package Modele.


Ah j'avais pas vu que c'était lui :D Il est aussi à l'origine de Solar


Message édité par FlorentG le 07-05-2008 à 12:16:36
n°1730217
hametsu
Posté le 09-05-2008 à 14:02:45  profilanswer
 

Bonjour,
Que pensez vous de l'utilisation des exceptions comme moyen de redirection interne permettant d'effectuer des actions chaînées.
Un exemple pour illustrer ma pensé :
 

Code :
  1. <?php
  2. class Dispatcher extends Exception
  3. {
  4. protected $_controllerName = null;
  5. protected $_actionName     = null;
  6. public function __construct($_controllerName, $_actionName)
  7. {
  8.     $this->_controllerName = (string) $_controllerName;
  9.     $this->_actionName     = (string) $_actionName;
  10. }
  11.     public function dispatch()
  12.     {
  13.         try {
  14.             $_controllerClassName = $this->_controllerName . 'Controller';
  15.             $_actionMethodName    = $this->_actionName . 'Action';
  16.            
  17.             $controller = new $_controllerClassName();
  18.             $controller->execute($_actionMethodName);
  19.            
  20.         } catch (Dispatcher $dispatcher) {
  21.             $dispatcher->dispatch();
  22.         }
  23.     }
  24. }
  25. class Controller
  26. {
  27.     public function __construct()
  28.     {
  29.        
  30.     }
  31.    
  32.     public function preExecute()
  33.     {
  34.        
  35.     }
  36.    
  37.     public function execute($_actionMethodName)
  38.     {
  39.         $this->preExecute();
  40.         $this->$_actionMethodName();
  41.         $this->postExecute();
  42.     }
  43.    
  44.     public function postExecute()
  45.     {
  46.        
  47.     }
  48.    
  49.     public function forward ($_controllerName, $_actionName)
  50.     {
  51.         throw new Dispatcher ($_controllerName, $_actionName);
  52.     }
  53. }
  54. class FooController extends Controller
  55. {
  56.     public function preExecute()
  57.     {
  58.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  59.     }
  60.    
  61.     public function fozAction()
  62.     {
  63.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  64.        
  65.         $this->forward('Bar', 'baz');
  66.     }
  67.    
  68.     public function postExecute()
  69.     {
  70.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  71.     }
  72. }
  73. class BarController extends Controller
  74. {
  75.     public function preExecute()
  76.     {
  77.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  78.     }
  79.    
  80.     public function bazAction()
  81.     {
  82.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  83.     }
  84.    
  85.     public function postExecute()
  86.     {
  87.         echo __CLASS__ . ' -> ' . __FUNCTION__ . PHP_EOL;
  88.     }
  89. }
  90. $dispatcher = new Dispatcher('Foo', 'foz');
  91. $dispatcher->dispatch();
  92. /*
  93. Reponse:
  94. FooController -> preExecute
  95. FooController -> fozAction
  96. BarController -> preExecute
  97. BarController -> bazAction
  98. BarController -> postExecute
  99. */


Message édité par hametsu le 09-05-2008 à 14:03:07
n°1730221
skeye
Posté le 09-05-2008 à 14:06:32  profilanswer
 

J'en pense pas trop trop de bien, j'aime pas le détournement des exceptions pour autre chose...Si tu veux chainer des actions en fonction d'un événement tu as des patterns genre chain of responsability non?


Message édité par skeye le 09-05-2008 à 14:06:43

---------------
Can't buy what I want because it's free -
n°1730226
hametsu
Posté le 09-05-2008 à 14:10:38  profilanswer
 

J'en ai pas vraiment compris l'application en PHP...

n°1730227
skeye
Posté le 09-05-2008 à 14:11:32  profilanswer
 

l'application de quoi? de chain of responsability, ou des exceptions?


---------------
Can't buy what I want because it's free -
n°1730235
hametsu
Posté le 09-05-2008 à 14:20:06  profilanswer
 

De "chain of responsability", en réalité, j'aimerai qu'une action peut passer la main à un autre action et ainsi de suite selon certain cas mais sans les définir au préalable comme par exemple instancier une action A, B et C, faire un foreach et executer une méthode...
 
J'en profite pour rajouter ces questions :
- front controller, unique point d'entrée d'une application, mais est-ce lui qui détient les set/get pour les différentes classes du système comme request, response, router, dispatcher, i18n etc..  
- action controller ou page controller ? un controller peut avoir plusieurs actions soit on dit "action controller" sinon "page controller" ?
- et pour application controller ? c'est juste une extension du front controller rajoutant quelques méthodes ?
- qu'est qu'une classe "context" comme celle de symphony ? est-ce le même que l'object abstract request de Zend ? Qui set/get réellement le nom du controlleur, de l'action et des paramètres à invoquer, ne serait-ce pas le dispatcher car après tout c'est lui qui délègue vers le controller qui execute une action... ?

Message cité 1 fois
Message édité par hametsu le 09-05-2008 à 14:34:24
n°1730250
skeye
Posté le 09-05-2008 à 14:37:20  profilanswer
 

Bah c'est pareil dans tous les langages, non?
D'ailleurs c'est le principe utilisé par les exceptions, en fait...elles remontent le long de la chaine (ici la pile d'exécution) jusqu'à tomber sur un handler qui va bien (le catch).


---------------
Can't buy what I want because it's free -
n°1730256
skeye
Posté le 09-05-2008 à 14:41:22  profilanswer
 

pour les questions supplémentaires, je passe mon tour :p


---------------
Can't buy what I want because it's free -
n°1730257
hametsu
Posté le 09-05-2008 à 14:42:33  profilanswer
 

un do {} while(); avec une variable booléenne comme le fait zend... mais j'aime pas le faite qu'on se serve de l'objet requête pour stoker le nom de du controller et de l'action.

n°1730258
FlorentG
Posté le 09-05-2008 à 14:42:50  profilanswer
 

hametsu a écrit :

- qu'est qu'une classe "context" comme celle de symphony ?


Chez moi la classe Context contenait la requête, la réponse, la session, etc. Mais j'ai fini par tout balancer pour simplifier.

n°1730269
hametsu
Posté le 09-05-2008 à 14:56:07  profilanswer
 

Donc tu pouvais les set/get ?  
 
J'aimerais n'avoir qu'à effectuer Controller_Front::execute('path/to/application'); pour exécuter mon application.
 
Le Front controller, se servirait d'une requête Http, analysé par un router passant le résultat de cette analyse au dispatcher pour instancier le controller demandé.
 
Ce controller, hériant d'une classe de base Controller_Action, exécuterait une méthode preExecute, l'action et postExecute.
 
Les filtres seront exécutés par le Front controller avant et après le dispatchage.
 
Mais la question que je me pose est ou stocké le nom du controlleur et de l'action afin de permettre un "forward"... et comment l'effectuer ?


Message édité par hametsu le 09-05-2008 à 14:57:59
n°1730270
FlorentG
Posté le 09-05-2008 à 14:58:24  profilanswer
 

Moi pour tout ce qui est machins un peu globaux comme ça, j'ai un Service Locator dynamique : j'peux charger des services et en définir une instance comme accessible statiquement. Si je garde l'instance quelque part j'peux modifier les services, utile pour les tests unitaires.

n°1730297
hametsu
Posté le 09-05-2008 à 15:43:44  profilanswer
 

Comme le "registry pattern" en somme ? mais ou fais-tu ta première instance ? celle qui initialise ton objet pour ensuite l'enregistrer ? permets-tu l'extension de cette objet au travers de ton front controller ?

n°1730302
FlorentG
Posté le 09-05-2008 à 15:53:45  profilanswer
 

J'ai un objet qui se charge de le configurer avant de lancer le Front Controller

n°1730311
hametsu
Posté le 09-05-2008 à 16:01:13  profilanswer
 

Comment ça ? dans un fichier de configuration tu mets le nom des classes à utiliser pour un service et ce fichier tu le passes au front controller ?

n°1730349
FlorentG
Posté le 09-05-2008 à 18:53:51  profilanswer
 

Nan, j'ai une fonction qui initialise tous les services selon les besoins.

n°1730883
vanadium
N° Atomique : 23
Posté le 12-05-2008 à 16:03:09  profilanswer
 

Hametsu > Si ça peut t'aider, j'ai fait un petit framework vite fait avec Front Controller, chainage de filtres, Routeur PHP, internationalisation,  
moteur de templates à base de PHP etc.
 
Lien pour le download : http://rapidshare.com/files/114367 [...] k.zip.html
 
Crée toi en local un dossier /framework (sous wamp par exemple) et place le framework dedans. Puis va sur l'url :
http://localhost/framework/default/index
Sinon, si t'as envie de tweaker un peu t'as le fichier de conf général du framework dans /conf. ;)

n°1730911
hametsu
Posté le 12-05-2008 à 17:39:16  profilanswer
 

Merci l'ami, je vais "tweaker" ça :p
 
PS: c'est quoi ce mot o_O¿

n°1730919
vanadium
N° Atomique : 23
Posté le 12-05-2008 à 17:52:06  profilanswer
 

"tweaker" signifie modifier en gros. :D

n°1730943
art_dupond
je suis neuneu... oui oui !!
Posté le 12-05-2008 à 18:59:04  profilanswer
 

du coup twinky winky veut dire...
 
 

Spoiler :

[:drap]


---------------
oui oui
n°1731136
flo850
moi je
Posté le 13-05-2008 à 12:16:09  profilanswer
 

bon , je suis (enfin ) en train de refactorer le coeur du CMS sur lequel je bosse ( php4/mysql3 ) pour le faire passer a php5 mysql5 , et surtout, aux classes, au lieu d'avoir des fichiers de plus de 3 000 lignes de codes  mélangeant SQL , js, php et HTML  
 
 
voila en gros la solution sur laquelle je pars
 

  • un front controler : chargé d'instancier le bon "module" ( GED, agenda, planning, groupe de travail, .... )  
  • un  niveau en dessous de contrôleur, chargés  de gérer les actions au sein d'un module ( ajouter un rendez vous pour un agenda , supprimer une page)  


par contre, j'ai du mal a voir, qui doit gérer les droits d'accès ?  
ca se fait au niveau du modèle ou du controleur ? j'aurai plutôt dit que c'est à la charge du controleur , mais j'ai un doute


---------------

n°1731138
drasche
Posté le 13-05-2008 à 12:24:18  profilanswer
 

Moi je dirais modèle. C'est même mon modèle qui charge les privilèges avant de charger les données.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1731139
ratibus
Posté le 13-05-2008 à 12:29:00  profilanswer
 

Chez moi y en a un partie dans les controlleurs (tel profil a droit à telle ou telle action...).
J'en ai aussi dans la vue (tel profil à le droit de voir telle infos, genre une colonne de plus dans un tableau).


---------------
Mon blog
n°1731140
drasche
Posté le 13-05-2008 à 12:35:09  profilanswer
 

En fait, le modèle a pour charge d'aller chercher ses propres privilèges en fonction de l'utilisateur courant, et des fonctions rapportent ce qu'il a le droit de faire. Le contrôleur se contente de faire passer l'info, la vue se contente de lire ces infos ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1731146
masklinn
í dag viðrar vel til loftárása
Posté le 13-05-2008 à 12:50:53  profilanswer
 

drasche a écrit :

En fait, le modèle a pour charge d'aller chercher ses propres privilèges en fonction de l'utilisateur courant, et des fonctions rapportent ce qu'il a le droit de faire. Le contrôleur se contente de faire passer l'info, la vue se contente de lire ces infos ;)


On peut aussi avoir une surcouche (par contre je sais pas comment exprimer ça en PHP): dans django, on peut spécifier que certaines vues ne sont accessibles qu'avec certains droits via une annotation:

 

une vue normale est une fonction classique

Code :
  1. def myview(request):
  2.    # do stuff


on peut checker manuellement e.g. que l'utilisateur est loggé ou qu'il a bien une perm précise

Code :
  1. def authenticated_view(request):
  2.    if not request.user.is_authenticated():
  3.        return HttpResponse("fail" )
  4.    # do stuff
  5.  
  6. def permissioned_view(request):
  7.    if not request.user.has_perm("epic.win.man" ):
  8.        return HttpResponse("fail" )
  9.    # do win stuff
 

Mais c'est sale, ça inclue le code de vérification dans la vue alors que celui-ci est en réalité placé à un niveau plus haut.

 

Donc on peut utiliser des décorateurs qui gèrent la partie droits plus simplement, plus clairement et évitent de le coller manuellement dans les vues:

Code :
  1. @login_required
  2. def authenticated_view(request):
  3.    # do stuff, only logged-in users can reach this
  4.  
  5. @permission_required("epic.win.man" )
  6. def permissioned_view(request):
  7.    # do stuff, only epic win men can reach this
 

Et bien sûr, comme les décorateurs python sont en fait de simples HOFs, on peut déplacer ces appels dans le dispatcheur d'url si on veut pouvoir utiliser une vue donnée dans des cas différents, certains devant être protégés et d'autres non :o

 

edit: of course, si on a besoin d'un truc plus fin, genre un traitement différent en fonction de certains droits et non juste autoriser ou refuser l'accès à une vue, on peut revenir à une vérification manuelle via l'objet User comme en haut.

Message cité 1 fois
Message édité par masklinn le 13-05-2008 à 12:51:57

---------------
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°1731169
flo850
moi je
Posté le 13-05-2008 à 13:53:26  profilanswer
 

drasche a écrit :

Moi je dirais modèle. C'est même mon modèle qui charge les privilèges avant de charger les données.


c'est vrai que le modèle peut prendre en charge le fait que l'user ai accès ou non aux données, mais a ce moment, là, une partie des droits va dans la vue aussi , et ca me gène de séparer ça un peu partout
 
c'est déjà bien le bordel la gestion des droits, donc si je pexu centraliser

ratibus a écrit :

Chez moi y en a un partie dans les controlleurs (tel profil a droit à telle ou telle action...).
J'en ai aussi dans la vue (tel profil à le droit de voir telle infos, genre une colonne de plus dans un tableau).


 
ca me semble être le plus simlpe a programmer, mais quelque part, ca me gène  
 
Dans ce cas là , je ferai qq chose comme ça :
controler.php  

Code :
  1. switch($action)
  2. {
  3.     case 'edit':
  4.               if($user->canEditFolder($idFolder))
  5.               {
  6.                      $folder = new FolderModel($idFolder);
  7.                      $flagAdmin =  $user->canAdminFolder($idFolder);
  8.                      $view = new FolderEditView($folder,$flagAdmin);
  9.                      $view->show();
  10.              }
  11.              else
  12.              {
  13.                     $view = new ForbiddenFolderView();
  14.                     $view->show();
  15.              }
  16. }


 
histoire que la vue sache si il faut afficher les outils d'admin ou pas, mais sans savoir pourquoi . Il n'y a que le controleur qui fait le lien .
 

masklinn a écrit :


On peut aussi avoir une surcouche (par contre je sais pas comment exprimer ça en PHP): dans django, on peut spécifier que certaines vues ne sont accessibles qu'avec certains droits via une annotation:
 
une vue normale est une fonction classique

Code :
  1. def myview(request):
  2.    # do stuff


on peut checker manuellement e.g. que l'utilisateur est loggé ou qu'il a bien une perm précise

Code :
  1. def authenticated_view(request):
  2.    if not request.user.is_authenticated():
  3.        return HttpResponse("fail" )
  4.    # do stuff
  5.  
  6. def permissioned_view(request):
  7.    if not request.user.has_perm("epic.win.man" ):
  8.        return HttpResponse("fail" )
  9.    # do win stuff


 
Mais c'est sale, ça inclue le code de vérification dans la vue alors que celui-ci est en réalité placé à un niveau plus haut.
 
Donc on peut utiliser des décorateurs qui gèrent la partie droits plus simplement, plus clairement et évitent de le coller manuellement dans les vues:

Code :
  1. @login_required
  2. def authenticated_view(request):
  3.    # do stuff, only logged-in users can reach this
  4.  
  5. @permission_required("epic.win.man" )
  6. def permissioned_view(request):
  7.    # do stuff, only epic win men can reach this


 
Et bien sûr, comme les décorateurs python sont en fait de simples HOFs, on peut déplacer ces appels dans le dispatcheur d'url si on veut pouvoir utiliser une vue donnée dans des cas différents, certains devant être protégés et d'autres non :o
 
edit: of course, si on a besoin d'un truc plus fin, genre un traitement différent en fonction de certains droits et non juste autoriser ou refuser l'accès à une vue, on peut revenir à une vérification manuelle via l'objet User comme en haut.


 
ça se fait pas tout à fait  de la même manière en PHP, mais j'avoue que ça me gène que la vue doive savoir que l'user est bidule truc ou machin, ou qu'il a le droit de pisser contre le vent sans salir ses chaussures
Je préférerai dire a la vue les paramètres qui sont nécessaires plutôt que lui laisser le choix


---------------

n°1731184
flo850
moi je
Posté le 13-05-2008 à 14:21:28  profilanswer
 

bon en fait, je viens de trouver un contre exemple  
 
sur les dossiers "normaux" j'affiche en contenu la liste des sous dossiers accessibles ( profondeur arbitraire, le records est a 4 ) pour des raisons d'accessibilité et de remplissage  
Les dossiers auxquels ont a accès sont affichés sous forme de liens, pour les autres , il s'agit juste du titre du dossier, non cliquable
 
si la vue et le controleur ne doivent pas voir la partie "droits,  il faut que je passe en paramètres tous les droits :super:


---------------

n°1731185
masklinn
í dag viðrar vel til loftárása
Posté le 13-05-2008 à 14:26:09  profilanswer
 

flo850 a écrit :

bon en fait, je viens de trouver un contre exemple

 

sur les dossiers "normaux" j'affiche en contenu la liste des sous dossiers accessibles ( profondeur arbitraire, le records est a 4 ) pour des raisons d'accessibilité et de remplissage
Les dossiers auxquels ont a accès sont affichés sous forme de liens, pour les autres , il s'agit juste du titre du dossier, non cliquable

 

si la vue et le controleur ne doivent pas voir la partie "droits,  il faut que je passe en paramètres tous les droits :super:


j'ai rien compris \o/

 

Mais pourquoi la vue et le contrôlleur ne verraient pas la partie droits? Chez moi (enfin dans Django plus précisément) la vue et le template (ya pas de contrôlleur dans django, enfin pas vraiment, disons que l'interaction du programmeur avec le controlleur django c'est habituellement juste de définir l'url dispatching) ont accès au user courant, et via ce dernier à ses perms & autres (et pour simplifier les templates, les perms du user courant sont dumpée directement dans un objet perms accessible directement)

Message cité 2 fois
Message édité par masklinn le 13-05-2008 à 14:28:50

---------------
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°1731187
theredled
● REC
Posté le 13-05-2008 à 14:29:14  profilanswer
 

Dans Django, la vue est l'équivalent en gros de l'action controller ailleurs, en tout cas c'est ce qu'il disent dans la doc :o

Message cité 1 fois
Message édité par theredled le 13-05-2008 à 14:31:45

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1731189
masklinn
í dag viðrar vel til loftárása
Posté le 13-05-2008 à 14:31:53  profilanswer
 

theredled a écrit :

Dans Django, la vue est l'équivalent en gros du controller ailleurs, en tout cas c'est ce qu'il disent dans la doc :o

 
Citation :

Django appears to be a MVC framework, but you call the Controller the “view”, and the View the “template”. How come you don’t use the standard names?

 

Well, the standard names are debatable.

 

In our interpretation of MVC, the “view” describes the data that gets presented to the user. It’s not necessarily how the data looks, but which data is presented. The view describes which data you see, not how you see it. It’s a subtle distinction.

 

So, in our case, a “view” is the Python callback function for a particular URL, because that callback function describes which data is presented.

 

Furthermore, it’s sensible to separate content from presentation — which is where templates come in. In Django, a “view” describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.

 

Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.

 

If you’re hungry for acronyms, you might say that Django is a “MTV” framework — that is, “model”, “template”, and “view.” That breakdown makes much more sense.

 

At the end of the day, of course, it comes down to getting stuff done. And, regardless of how things are named, Django gets stuff done in a way that’s most logical to us.

 

et ça devient classieux quand on commence à jouer avec les generic views \o/

Message cité 1 fois
Message édité par masklinn le 13-05-2008 à 14:32:58

---------------
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°1731191
theredled
● REC
Posté le 13-05-2008 à 14:35:59  profilanswer
 

masklinn a écrit :


 

Citation :

Django appears to be a MVC framework, but you call the Controller the “view”, and the View the “template”. How come you don’t use the standard names?
 
Well, the standard names are debatable.
 
In our interpretation of MVC, the “view” describes the data that gets presented to the user. It’s not necessarily how the data looks, but which data is presented. The view describes which data you see, not how you see it. It’s a subtle distinction.
 
So, in our case, a “view” is the Python callback function for a particular URL, because that callback function describes which data is presented.
 
Furthermore, it’s sensible to separate content from presentation — which is where templates come in. In Django, a “view” describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.
 
Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.
 
If you’re hungry for acronyms, you might say that Django is a “MTV” framework — that is, “model”, “template”, and “view.” That breakdown makes much more sense.
 
At the end of the day, of course, it comes down to getting stuff done. And, regardless of how things are named, Django gets stuff done in a way that’s most logical to us.


 
et ça devient classieux quand on commence à jouer avec les generic views \o/


Ce que je comprend pas là-dedans, c'est que, me semble-t-il, les opérations faites dans la BDD (insert update etc) doivent aussi etre déclenchés par la view... Hors là ça n'a plus rien a voir avec "quelles données sont présentées"...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  43  44  45  ..  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)