Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
je voudrais un exemple montrant les boostrap des modules et le boostrap general et un exemple de création plugin qui permet de charger les boostrap des modules depuis le boostrap general.
et merci de m'aider.
Hors ligne
Bonsoir,
Pour les exemples, je pense qu'un exemple du Bootstrap général devrait suffire.
En effet, dès lors que ton application.ini est correctement paramétré, et que tes modules sont auto-chargés, le Bootstrap de chaque module est chargé automatiquement, et les fonctions déclarées dans les Bootstrap des modules viendront tout simplement compléter celles déclarées dans ton Bootstrap général. Elles peuvent s'appeler pareil, c'est sans importance.
Maintenant, pour l'exemple de Bootstrap général, le mieux serait de savoir ce que tu veux faire à cet endroit.
Mais bon, en voici un, de base :
[lang=php]<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{ /** * Initialize the application autoload * * @return <Zend_Application_Module_Autoloader> */ protected function _initAppAutoload(){ $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'App', 'basePath' => dirname(__FILE__))); return $autoloader; } /** * Initialize default database adapter * * @return <Zend_Db_Adapter> */ protected function _initDatabaseRegistry(){ $this->bootstrap('db'); $db = $this->getResource('db'); Zend_Registry::set('db', $db); return $db; } /** * Initialize the layout loader * * @return <Zend_Layout> */ protected function _initLayoutHelper(){ $layout = Zend_Controller_Action_HelperBroker::addHelper(new My_Controller_Action_Helper_LayoutLoader()); return $layout; } /** * Initialize the view helpers * * @return <Zend_View> */ protected function _initViewHelpers(){ $this->bootstrap('View'); $view = $this->getResource('View'); // Autoload view helpers $view->addHelperPath('My/View/Helper', 'My_View_Helper'); // Add view to the current view renderer $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view); return $view; } /** * Start session * */ protected function _initSession(){ // Global session $mySession = new Zend_Session_Namespace('mySession', true); Zend_Registry::set('mySession', $mySession); } /** * Initialize cache * */ protected function _initCache(){ $frontendOptions = array('lifetime' => 7200, 'automatic_serialization' => true); $backendOptions = array('cache_dir' => APPLICATION_PATH . '/../data/cache'); $cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions); Zend_Registry::set('cache', $cache); // Activate cache for DbTables structure Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); // Activate cache for translations Zend_Translate::setCache($cache); } } ?>
A condition que ton application.ini soit correctement paramétré :
[production] ; Display errors : phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 ; Library path : includePaths.library = APPLICATION_PATH "/../library" ; My library : autoloaderNamespaces.my = "My_" ; Bootstrap : bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" ; Front controller path : resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" ; Modules path : resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules[] = ; Default layout path : resources.layout.layoutPath = APPLICATION_PATH "/views/layouts" ; Views : resources.view[] = ; View helpers : resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/views/helpers" ; Database : resources.db.adapter = "PDO_MYSQL" resources.db.params.host = "localhost" resources.db.params.username = "root" resources.db.params.password = "" resources.db.params.dbname = "mabase" resources.db.isDefaultTableAdapter = true resources.db.profiler = true
Maintenant, avec ça, tu devrais avoir des questions plus précises je pense
Dernière modification par delorbe (10-05-2012 20:51:06)
Hors ligne
merci pour ta réponse
Hors ligne
De rien
N'hésite pas si tu as des questions
Hors ligne
Bonjour à tous
Utilisateur de Zend Framework Version: 1.11.11 depuis bientôt six mois, j'ai appris à apprécier toute la souplesse et la puissance de cet outil.
Là je me retrouve avec un problème. j'ai une application qui comporte deux modules: Admin et Etudiant. chaque module a son Bootstrap. Quand l'application démarre elle parcourt les deux bootstrap des modules au lieu de charger le boostrap spécifique au module.
Je joins à mon message les fichiers de mes trois bootstrap. J'aimerais que vous m'aidez à optimiser le chargement de mes classes.J'espère que j'ai été assez explicite. Merci d'avance.
Bootstrap général
<?php //Zend_Session::start(); class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initPlugins() { // Access plugin $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new My_Plugins_Module()); } /** * Initialize View * * @return Zend_View */ protected function _initView() { // Initialize view $view = new Zend_View ( ); $view->doctype('XHTML1_STRICT'); $view->headMeta()->appendHttpEquiv( 'Content-Type', 'text/html; charset=UTF-8' ); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer' ); $viewRenderer->setView($view); // Return it, so that it can be stored by the bootstrap return $view; } protected function _initPlaceholders() { $this->bootstrap('View'); $view = $this->getResource('View'); // Précise le titre initial et le séparateur: $view->headTitle('Elite') ->setSeparator(' :: '); } protected function _initViewHelpers() { $view = $this->getResource('view'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper'); $view->jQuery()->enable() ->addStylesheet('/js/jquery/css/ui-lightness/jquery-ui-1.8.18.custom.css') ->setLocalPath('/js/jquery/js/jquery-1.7.1.min.js') ->setUiLocalPath('/js/jquery/js/jquery-ui-1.8.18.custom.min.js') ->uiEnable(); $viewRenderer->setView($view); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); } }
Bootstrap admin
<?php class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { /** * Initialize session * * @return Zend_Acl */ protected function _initAcl() { /* * Création d'une instance de notre ACL */ $acl = new My_Acls_Adminacl(); /* * enregistrement du plugin de manière à ce qu'il soit exécuté */ $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new My_Plugins_Acl_Admin()); /* * permet de définir l'acl par défaut à l'aide de vue, de cette manière * l'ACL est accessible dans les vues */ Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl); } /** * Initialize session * * @return Zend_Session_Namespace */ protected function _initSession() { // On initialise la session $session = new Zend_Session_Namespace('Administrateur', true); if (!isset($session->initialized)) { Zend_Session::regenerateId(); $session->initialized = true; } Zend_Registry::set('session', $session); return $session; } protected function _initView() { $view = new Zend_View ( ); return $view; } // protected function _initPlaceholders() { $this->bootstrap('View'); $view = $this->getResource('View'); // Précise le titre initial et le séparateur: $view->headTitle('Espace Administrateur') ->setSeparator(' :: '); } } ?>
Bootstrap Default
<?php class Default_Bootstrap extends Zend_Application_Module_Bootstrap { /** * Initialize session * * @return Zend_Acl */ protected function _initAcl() { /* * Création d'une instance de notre ACL */ $acl = new My_Acls_Defaultacl(); /* * enregistrement du plugin de manière à ce qu'il soit exécuté */ $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new My_Plugins_Acl_Default()); /* * permet de définir l'acl par défaut à l'aide de vue, de cette manière * l'ACL est accessible dans les vues */ Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl); } /** * Initialize session * * @return Zend_Session_Namespace */ protected function _initSession() { // On initialise la session $session = new Zend_Session_Namespace('Etudiant', true); if (!isset($session->initialized)) { Zend_Session::regenerateId(); $session->initialized = true; } Zend_Registry::set('session', $session); return $session; } } ?>
Dernière modification par prince_apollon (17-08-2012 21:47:18)
Hors ligne
Salut,
Pour commencer, si ton module s'appelle "Etudiant", pourquoi le Boostrap et le plugin ACL correspondants sont-ils préfixés "Default", et pas "Etudiant" ?
Sinon, si c'est juste une coquille dans la rédaction de ton post...
Difficile, à mon avis, de résoudre ça en passant par le Bootstrap...
Pour ce que j'en sais, les Bootstrap sont automatiquement chargés, c'est comme ça.
Je ne sais pas s'il est possible de désactiver ça, encore moins comment le faire, voire même, si c'est souhaitable.
Néanmoins, je pense que ton souci est que le dernier plugin ACL (qui doit être My_Plugins_ACL_Default) est chargé, et que donc, quand tu te trouves dans ton module Admin, tu n'as pas le bon ACL chargé.
C'est ça?
Si non, essaie d'expliquer quel est ton problème exactement.
Si oui, peut-être pourrais-tu récupérer le nom du module actif avant d'initialiser le plugin ACL adéquat.
Seul souci : tu ne pourras pas faire ça dans le Bootstrap, car il semble que l'on ne puisse pas récupérer le nom du module courant à ce niveau. Il te faudrait donc initialiser ton plugin ailleurs.
Par contre, ton plugin ACL, lui, peut très bien récupérer le nom du module courant. c'est peut-être une piste...
Dis-m'en plus, si tu as besoin...
Hors ligne
Bonjour,
Merci de me répondre
Pour commencer, si ton module s'appelle "Etudiant", pourquoi le Boostrap et le plugin ACL correspondants sont-ils préfixés "Default", et pas "Etudiant" ?
Le module étudiant est le module par défaut
Le problème vient du fait que tous les plugins se chargent quelque soit le module ce qui n'est pas normal. J'aimerais que chaque plugin se charge seulement quend le module correspondant est appelé
Hors ligne
Bonjour,
Comme je l'ai dit plus haut, si tu charges tes plugins dans les Bootstrap de tes modules, ce que tu obtiens est normal à mon avis, puisque les Bootstrap semblent être automatiquement chargés.
Si tu veux charger le plugin propre à ton module courant, il te faudra l'initialiser ailleurs que dans le bootstrap. Dans un controller, par exemple. Ou dans le plugin lui-même.
Hors ligne
Merci de me répondre et Excusez moi si j'ai tardé à répondre. J'étais tombé malade.
Si tu veux charger le plugin propre à ton module courant, il te faudra l'initialiser ailleurs que dans le bootstrap. Dans un controller, par exemple. Ou dans le plugin lui-même.
Comment pourrais je charger le plugin dans le plugin lui même? Le plugin controle les acl donc à moins de le répéter partout je ne vois pas comment je pourrais le charger dans un controlleur.
Hors ligne
Il ne s'agit bien sûr pas de charger le plugin dans le plugin lui-même
Plutôt, à l'intérieur du plugin, de repérer le module courant, et donc de charger les ACL correspondants
Hors ligne
Tu peux me mettre un exemple de code?
Hors ligne
Récupérer le nom du module courant dans un plugin :
[lang=php]$frontController = Zend_Controller_Front::getInstance(); $moduleName = $frontController->getParam('module');
Dernière modification par delorbe (30-08-2012 13:26:55)
Hors ligne
merci delorbe. je te tiens au courant de ce que ca donne.
Hors ligne
Pages: 1