|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Bonjour,
Est-ce que qqun a déjà essayer de créer une architecture MVC modulaire avec le Zend Framework ? J'ai essayer mais je n'arrive pas à aiguiller les controller sur le bon module. D'après la doc on peut spécifier le module dans l'url, par exemple si j'ai un module 'news' je dois pouvoir taper /mon_url/news/controller/action mais sa ne fonctionne pas Pourtant j'ai déclare mes modules comme décrit dans la doc voici le lien pour la doc: http://framework.zend.com/manual/fr/...r.modular.html Merci d'avance.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
As tu déclaré les bonnes routes auprès du router ?
Il te faut quelque chose qui ressemble à ça: Code :
|
||
|
|
00
|
|
|
#3 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Le setControllerDirectory je l'avais fais par contre je n'ai pas ajouté une route.
Mais je ne comprend pas comment je dois faire cet ajout de route. Est-ce que je dois mettre le chemin exact /mod/controller/action/* ou est-ce que je dois laisser comme tu as mis? Ou est-ce que tu trouves la doc pour ces classes ? Je ne trouve rien à ce propos sur le site du Zend Framework Merci.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#4 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Je vais être plus clair, j'ai fais ce que tu m'as dis. Maintenant si je tape mon_url/module/controller/action
sa fonctionne mais sa n'appelle pas l'action. J'ai fais un echo avant la declaration de la classe controller et sa s'affiche donc l'inclusion doit bien se faire mais l'appelle de l'action ne fonctionne pas. Dans mon module test j'ai créer la classe FooController et dans cette classe j'ai créer la fonction barAction mais quand je tape mon_url/test/Foo/bar sa n'appelle pas bar
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#5 | ||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
En revanche, si tu précises des routes spécifiques qui ne comportent pas de variables telles que ':module' (ou :controller etc), alors il faut mettre explicitement en 2ième paramètre le module ou le controller tu utilises. Exemple: Code :
new Zend_Controller_Router_Route('test/Foo/bar', array('module' => 'test', 'controller' => 'Foo', 'action' => 'bar')) Citation:
Rien ne vaut également un petit tour directement dans les sources. Le MVC actuel est très simple (certains diront simpliste) et il est pratiquement aussi facile de browser les sources que de parcourir la doc de l'api. En ce qui concerne ton problème d'ActionController, je te recommanderais de faire en sorte que le Front Controller lance les exceptions levée lors de la dispatch loop. Procède ainsi au début de ton code: Y a des chances que tu sois en mesure de voir pourquoi ça ne fonctionne pas. Par exemple, il se peut que tu ais mal nommé le controller de ton module. Il faut qu'il soit nommé ainsi: class Mod_IndexController extends Zend_Controller_Action Chaque controller de module doit être préfixé du nom du module (qui est le même que le nom du répertoire du module). |
||
|
|
00
|
|
|
#6 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Ahhhhhhhhhhhhhhhh enfin sa marche !!! Merci beaucoup!
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Inscription : mars 2007 Messages : 3 ![]() |
Oui pour la structure modulaire et la définition du contrôlleur.
Mais pour les vues, je ne sais pas comment m'y prendre. Je ne veux pas (du moins je souhaite) avoir à déclarer ma vue à chaque fois... Comment faire pour indiquer à Zend le path de mes vues, en fonction du module, et de l'enregistrer dans le Zend::register?? Je sais qu'une solution serait de définir, dans __constructor , mais j'aimerais le faire au premier niveau,... Disons que j'ai le code suivant: Code :
Code :
|
||||
|
|
00
|
|
|
#8 | |
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Tous les controllers qui appartiennent à un même module pourraient dériver d'un controller abstrait (abstract) qui se chargerait d'instancier le bon View en lui fournissant directement les scriptPathes spécifiques au module. Cette instance de View serait un membre protected et donc utilisable par tous les controllers fils. Dans ces cas là, il n'y a probablement plus besoins d'un Zend_Registry (anciennement Zend::Registry pour ZF < 0.9.0) Une autre idée, ça serait d'utiliser un Plugin pour le preDispatch(). L'utilisation serait très proche de ce que certains font pour gérer les droits ACL. Quelques threads qui traitent de ce sujet: http://www.developpez.net/forums/sho...d.php?t=294593 http://www.developpez.net/forums/sho...d.php?t=297319 En gros, quand la méthode preDispatch() du plugin est appelée, on connaît le nom du module sur le point d'être chargé (via l'objet Request). On a donc la possibilité d'instancier le View adéquat et de le placer dans le registry. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com