Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je n'arrive pas à faire router correctement une url vers un module
Voici mon arbo
application/ controllers models views forms modules/ admin/ controllers models/ views/ blog/ controllers models/ views/
Mon module default est donc application/, et les autres sont dans modules.
J'ai la route suivante dans un fichier .ini
[routes] admin.route = "admin/" admin.defaults.controller = "index" admin.defaults.action = "index" admin.defaults.module = "admin"
L'url suivante
<a href="<?= $this->url(array('controller' => 'index', 'action' => 'index', 'module' => 'admin'), 'admin') ?>">Admin</a>
me charge le controleur Index du module default
Dans mon boostrap ZF 1.8.3 , j'ai loadé les modules de la manière suivante :
protected function _initAutoload() { $defaultloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default_', 'basePath' => dirname(__FILE__), )); $adminloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Admin_', 'basePath' => APPLICATION_PATH . '/modules/admin/')); }
j'ai l'impression que le répertoire "modules" n'est pas reconnu...
Merci pour votre aide.
Dernière modification par supertino7 (11-06-2009 17:28:50)
Hors ligne
Bon je pense que j'ai trouvé.
En fait, il faut quand même initialiser le frontController dans le boostrap :
protected function _initFrontController() { // Récupération d'une instance du controleur frontal $frontController = Zend_Controller_Front::getInstance(); // Définition du répertoire de modules $frontController->addModuleDirectory(APPLICATION_PATH . '/modules'); $frontController->setControllerDirectory(array( 'default' => APPLICATION_PATH . '/controllers', 'admin' => APPLICATION_PATH . '/modules/admin/controllers')); return $frontController; }
Et là, on peut attribuer à chaque module un nom.
Et donc, à chaque nouveau module que je crée, il va falloir que je spécifie le répertoire de ses controleurs.
Mais alors, à quoi sert le Zend_Application_Module_Autoloader .... ?
pourtant il charge des ressources comme les Models ou les Forms, mais pourquoi pas les controleurs aussi ? Ou alors il n'est pas encore abouti ?
Hors ligne
hellow,
J'aimerai construire la même arborescence que toi mais je n' arrive pas...
puis-je voir ton bootstrap stp?
merci
Hors ligne
Bonjour j'ai eu un problème similaire.
J'ai laissé mes codes ayant permis de déclarer mes modules sur le post :
http://www.z-f.fr/forum/viewtopic.php?id=3291
bon courage
Hors ligne
salut patstey !
j'ai vu ton post mai sil me semble que ton arbo n'est pas éxactement la même ....
t'est modules sont en dehors de l'application..
Hors ligne
Salut ''pinouf''
pinouf a écrit:
il me semble que ton arbo n'est pas exactement la même ....
t'est modules sont en dehors de l'application..
Evidement que mon arborescence n'est pas la même Chaque 'site' à ses propres besoins.
Néanmoins ton problème est identique à celui que j'ai rencontré :
1 - tu as tes modules dans un dossier /modules' mais pas tous
2 - ton module 'default' n'est pas dans ce dossier
C'est la même chose, sauf que tes différents modules sont rangés différemment.
Pour ton application.ini essaye :
; déclaration du module default dans '/application' resources.frontController.controllerDirectory.default = APPLICATION_PATH "/controllers" ; déclaration du dossier pour les autres modules resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" ;initialisation des modules (tous) resources.modules[] =
J'ai juste adapté les déclarations des chemins pour TON arbo.
En espérant que cela t'aide à comprendre.
PatStey
PS : mieux vaut comprendre le code des autres et l'adapter à ses besoins, que de copier/coller une réponse toute faite sans la comprendre
Hors ligne
hello
resources.modules[] =
pourquoi c'est vide?
cela veut dire quoi?
Dernière modification par pinouf (12-06-2009 16:59:20)
Hors ligne
Si j'ai bien compris
Cette ligne permet de 'lancer' l'initialisation de la ressource modules et donc d'initialiser les bootstrap.php de chacun des modules.
Pourquoi est-elle vide ? aucune idée
Maintenant je n'ai pas trouvé d'explication dans la doc (je crois avoir trouvé cela sur le forum).
Si quelqu'un à plus d'explication je suis aussi preneur.
As-tu résolu ton problème ?
Hors ligne
non
je suis en plein test et acharnement lol
en faite je trouve cela bizarre de mettre des boopstrap pour chaque module...
enfin pour l'instant cela ne marche pas je reviens dans 20 min pour vous dire comment cela avance
Hors ligne
bon en gros c'est la mort complète lol....
voici mon ini
includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" ;déclaration du dossier pour les autres modules resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" ;initialisation des modules (tous) resources.modules[] =
mon bootstrap est vide ( le défaut) les pages marchent très bien
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
dans application/modules/admin
j'ai mis un bootstrap
class Admin_Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
est quand je tape le lien sa me sors une belle erreur
Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\wamp\www\zendtesting\library\Zend\Loader\PluginLoader.php on line 264
Hors ligne
en gros il a pas aimé le bootstrap de l'admin quand je le vire il me remet une erreur
An error occurred
message ?>
Exception information:
Message: exception->getMessage() ?>
Stack trace:
exception->getTraceAsString() ?>
Request Parameters:
request->getParams()) ?>
Hors ligne
ah ben ca marche....
j'ai viré le bootstrap dans l'admin
est a la place est nommé le controlleur
class Admin_IndexController extends Zend_Controller_Action
je me demande maintenant à quoi sa sers de mettre plusieurs bootstrap vu que moi j'en ais que un... et que si j'en met un cela plante..
Hors ligne
patstey a écrit:
Bonjour j'ai eu un problème similaire.
J'ai laissé mes codes ayant permis de déclarer mes modules sur le post :
http://www.z-f.fr/forum/viewtopic.php?id=3291
bon courage
Merci
Tu as également pu me dire comment charger des boostraps supplémentaires à chaque module (grace au fameux resources.modules[] )
Sinon, apparemment il n'est pas nécéssaire de spécifier le répertoire controleur de chaque module,
resources.frontController.controllerDirectory.admin = APPLICATION_PATH "/admin/controllers"
tant qu'il se situe dans modulename/controller/
En fait, le plus important, c'est de déclarer celui du module default.
merci, je vais pouvoir décoller
Hors ligne
J'aurai une dernière question, en rapport avec le boostrap de module.
Comment fait-on pour avoir la main sur l'objet vue ? Je voulais ajouter un script et des feuilles de style, mais
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { protected function _initViewHelpers() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->headScript()->prependFile('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'); $view->headScript()->prependFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js'); $view->headScript()->appendFile('/js/inscription/inscription_formulaire.js');
me génère l'erreur
Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "view" not found'
getResource ne fonctionne pas
Hors ligne
Il te faudrait ajouter dans application.ini la ligne suivante :
admin.resources.view[] =
Je n'ai pas trouvé d'autres solutions que d'avoir à définir les paramètres pour le module en particulier, sans pouvoir définir des paramètres globaux.
Car si on regarde bien, le Bootstrap du module est d'abord appelé, et seuls les paramètres spécifiques à ce module sont définis. C'est ce qu'on voit dans Zend_Application_Module_Bootstrap, ligne 61
$key = strtolower($this->getModuleName()); if ($application->hasOption($key)) { // Don't run via setOptions() to prevent duplicate initialization $this->setOptions($application->getOption($key)); }
Dernière modification par SweedyMick (15-06-2009 15:02:58)
Hors ligne
SweedyMick a écrit:
Il te faudrait ajouter dans application.ini la ligne suivante :
Code:
admin.resources.view[] =Je n'ai pas trouvé d'autres solutions que d'avoir à définir les paramètres pour le module en particulier, sans pouvoir définir des paramètres globaux.
Car si on regarde bien, le Bootstrap du module est d'abord appelé, et seuls les paramètres spécifiques à ce module sont définis. C'est ce qu'on voit dans Zend_Application_Module_Bootstrap, ligne 61Code:
$key = strtolower($this->getModuleName()); if ($application->hasOption($key)) { // Don't run via setOptions() to prevent duplicate initialization $this->setOptions($application->getOption($key)); }
Merci pour ta réponse, ça marche. Mais c'est vrai que ça risque de s'avérer lourd, si les modules s'enchainent.
Quand tu parles de définir les paramètres globaux, je sais pas si on se comprends bien, mais les paramètres définis dans le Bootstrap de l'application sont bien définis aussi à tous les modules ?
Chez moi c'est comme ça, par exemple les feuilles de style que j'ai appelé dans le Bootstrap de l'appli dans _initViewHelpers sont balancés automatiquement dans les layout des modules.
Dernière modification par supertino7 (15-06-2009 15:25:28)
Hors ligne
supertino7 a écrit:
Merci pour ta réponse, ça marche. Mais c'est vrai que ça risque de s'avérer lourd, si les modules s'enchainent.
Quand tu parles de définir les paramètres globaux, je sais pas si on se comprends bien, mais les paramètres définis dans le Bootstrap de l'application sont bien définis aussi à tous les modules ?
Chez moi c'est comme ça, les feuilles de style que j'ai appelé dans le Bootstrap de l'appli sont balancés automatiquement dans les layout des modules.
Pardon, c'est effectivement bien le cas. Suite à une petite erreur, je me demandais pourquoi la ligne
resources.view.helperPath.My_Helper_Path = "My/Helper/Path"
ne fonctionnait pas. En fait, pas de problème.
Hors ligne