Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai essayé de créer une application avec des modules, ceux-ci sont naturellement dans le repertoire /modules de mon application. Ensuite j'ai mis un fichier Bootstrap.php par module. Le problème est quand je met ce fichier dans des modules dits 'modules par défaut' comme 'default' ou 'admin'. Je suppose peut-etre à tort que ces derniers ont déjà un autoloader de configurer et ainsi quand j'ajoute mon Bootstrap.php il s'appelle récursivement. En tout cas je n'ai pas trouvé de solution pour créer un fichier Bootstrap.php dans ces deux modules sans que cela génére une erreur.
Voici le message d'erreur que j'obtiens:
Fatal error: Maximum function nesting level of '100' reached, aborting!
voici quelques uns de mes fichiers
; application/configs/application.ini [production] ; PHP settings we want to initialize phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" ; frontcontroller resources resources.frontController.plugins.access = "Plugin_Access" ; resources.frontController.plugins.layout = "Plugin_Title" resources.frontController.throwException = true; resources.view[] = resources.modules = "" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.controllerDirectory.default = APPLICATION_PATH "/modules/default/controllers" resources.frontController.controllerDirectory.admin = APPLICATION_PATH "/modules/admin/controllers" resources.frontController.controllerDirectory.xml = APPLICATION_PATH "/modules/xml/controllers" resources.frontController.controllerDirectory.note = APPLICATION_PATH "/modules/note/controllers" ; so auto-loading will find our classes in library/App autoloaderNamespaces[] = "My_" ; set our language resources.translate.registry_key = "Zend_Translate" resources.translate.adapter = "array" resources.translate.options.scan = "directory" resources.translate.data = APPLICATION_PATH "/lang/" ; layout resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => dirname(__FILE__), )); return $autoloader; } protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->headTitle()->setSeparator(' - ') ->append('Retrodoc ' . APPLICATION_ENV); $view->headMeta()->appendHttpEquiv('Content-Type', 'application/xhtml+xml; charset=utf-8'); $view->doctype('XHTML1_STRICT'); ZendX_JQuery::enableView($view); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer->setView($view); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); } protected function _initAuth() { $auth = Zend_Auth::getInstance(); } protected function _initNavigation() { $view = $this->bootstrap('layout')->getResource('layout')->getView(); $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $view->navigation(new Zend_Navigation($config)); } protected function _initUserInformations() { $session = new Zend_Session_Namespace('User'); // $session->id = } protected function _initPlugins() { // register plugins $frontController = Zend_Controller_Front::getInstance(); $dbAdapter = Zend_Registry::get('dbAdapter'); // $pluginDebug = new My_Plugin_Debug(array('database_adapter' => $dbAdapter, 'memory_usage' => true, 'collect_view_vars' => true)); } protected function _initFireBugPhp() { $writer = new Zend_Log_Writer_Firebug(); $logger = new Zend_Log($writer); Zend_Registry::set('logger',$logger); } }
Hors ligne
Je rajoute une petite précision: apparemment il m'est impossible de mettre plus d'un fichier Bootstrap dans le répertoire /modules. Dans l'arborescence suivante j'ai essayé de mettre un Bootstrap dans le module note et un autre dans le module xml. Cela m'a automatiquement entrainé l'erreur détaillée précédement (infinite loop). En renommant le Bootstrap dans un des modules ou en le supprimant je n'ai plus l'erreur.
Est t-il possible de mettre plusieurs fichiers Bootstrap dans le répertoire module, dois-je plutot configurer mes modules via le Bootstrap principal? Merci de m'éclairer.
application/modules/
|-- admin
| |-- controllers
| |-- models
| `-- views
| |-- filters
| |-- helpers
| `-- scripts
|-- default
| |-- controllers
| | |-- ErrorController.php
| | |-- IndexController.php
| | `-- LoginController.php
| |-- forms
| | `-- Login.php
| |-- models
| `-- views
| |-- filters
| |-- helpers
| `-- scripts
| |-- error
| | |-- error.phtml
| | `-- index.phtml
| |-- index
| | `-- index.phtml
| `-- login
| |-- index.phtml
| `-- login.phtml
|-- note
| |-- Bootstrap.php.bak
| |-- controllers
| |-- models
| `-- views
| |-- filters
| |-- helpers
| `-- scripts
`-- xml
|-- Bootstrap.php
|-- controllers
|-- models
`-- views
|-- filters
|-- helpers
`-- scripts
32 directories, 11 files
Hors ligne
J'ai finalement abandonné l'idée de créer un Bootstrap par module et me suis rabattu sur la configuration de mes modules via le Bootstrap.php principal. Au cas où je vous montre le code:
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => '_', 'basePath' => APPLICATION_PATH)); $defaultloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default_', 'basePath' => APPLICATION_PATH . '/modules/default/')); $adminloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Admin_', 'basePath' => APPLICATION_PATH . '/modules/admin/')); $xmlloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Xml_', 'basePath' => APPLICATION_PATH . '/modules/xml/')); $noteloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Note_', 'basePath' => APPLICATION_PATH . '/modules/note/')); } }
Voilà c'est résolu
Hors ligne
Pages: 1