Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-05-2012 16:50:35

devzend
Membre
Date d'inscription: 03-05-2012
Messages: 15

[zend application][1.11.11] boostrap et module

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

 

#2 10-05-2012 20:49:46

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

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 :

Code:

[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é :

Code:

[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 smile

Dernière modification par delorbe (10-05-2012 20:51:06)

Hors ligne

 

#3 11-05-2012 10:31:23

devzend
Membre
Date d'inscription: 03-05-2012
Messages: 15

Re: [zend application][1.11.11] boostrap et module

merci pour ta réponse

Hors ligne

 

#4 11-05-2012 21:28:44

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

De rien smile

N'hésite pas si tu as des questions

Hors ligne

 

#5 16-08-2012 23:35:38

prince_apollon
Nouveau membre
Date d'inscription: 16-08-2012
Messages: 5

Re: [zend application][1.11.11] boostrap et module

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

Code:

<?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

Code:

<?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

Code:

<?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

 

#6 19-08-2012 17:52:35

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

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

 

#7 21-08-2012 11:49:55

prince_apollon
Nouveau membre
Date d'inscription: 16-08-2012
Messages: 5

Re: [zend application][1.11.11] boostrap et module

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

 

#8 21-08-2012 13:18:31

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

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

 

#9 29-08-2012 10:34:08

prince_apollon
Nouveau membre
Date d'inscription: 16-08-2012
Messages: 5

Re: [zend application][1.11.11] boostrap et module

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

 

#10 29-08-2012 11:05:26

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

Il ne s'agit bien sûr pas de charger le plugin dans le plugin lui-même smile

Plutôt, à l'intérieur du plugin, de repérer le module courant, et donc de charger les ACL correspondants

Hors ligne

 

#11 29-08-2012 12:04:40

prince_apollon
Nouveau membre
Date d'inscription: 16-08-2012
Messages: 5

Re: [zend application][1.11.11] boostrap et module

Tu peux me mettre un exemple de code?

Hors ligne

 

#12 30-08-2012 13:26:19

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [zend application][1.11.11] boostrap et module

Récupérer le nom du module courant dans un plugin :

Code:

[lang=php]$frontController = Zend_Controller_Front::getInstance();
$moduleName = $frontController->getParam('module');

Dernière modification par delorbe (30-08-2012 13:26:55)

Hors ligne

 

#13 02-09-2012 09:46:37

prince_apollon
Nouveau membre
Date d'inscription: 16-08-2012
Messages: 5

Re: [zend application][1.11.11] boostrap et module

merci delorbe. je te tiens au courant de ce que ca donne. smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages