Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#26 26-08-2009 17:32:37

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Z_A_Resource_Modules n'est pas appelée par défaut, il me semble qu'elle ne l'est seulement si tu ajoutes en config :

Code:

resources.modules[] = '' // ou associée

En retirant cette ligne la resource de plugin 'Modules' ne sera pas appelée, et donc les bootstraps ne seront pas chargés.

Ce que j'ai commencé à faire pour ma part (même cas que toi), au lieu de gérer l'appel des bootstraps des modules dans le bootstrap par défaut, j'ai créé ma classe My_Application_Resource_Modules qui se charge de regarder quels sont les modules activés, et qui (non-implémenté encore) se chargera de charger les bootstraps au cas par cas.

Code:

// ajout en config de
resourcePaths.My_Application_Resource = LIBRARY_PATH "/My/Application/Resource/"
// qui vient complémenter le path de Zend_Application_Resource

// appel de la ressourece
resources.modules[] = ''
// My_Application_Resource est parsé avant Zend_Application_Resource, c'est donc ma ressource "My_*" qui est utilisée à la place de celle de Zend

Code:

class My_Application_Resource_Modules
    extends Zend_Application_Resource_ResourceAbstract
{
    /**
     * Defined by Zend_Application_Resource_Resource
     *
     * @return void
     */
    public function init()
    {
        // your stuff
        return;
    }
}

Après tu peux regarder comme la ressource de ZF fonctionne pour charger les bootstraps en adaptant le code histoire que tu ne charges pas tous les modules comme ici mais seulement les tiens

Code:

// class Zend_Application_Resource_Modules
    /**
     * Initialize modules
     *
     * @return array
     * @throws Zend_Application_Resource_Exception When bootstrap class was not found
     */
    public function init()
    {
        $bootstrap = $this->getBootstrap();
        $bootstrap->bootstrap('FrontController');
        $front = $bootstrap->getResource('FrontController');

        $modules = $front->getControllerDirectory();
        $default = $front->getDefaultModule();
        foreach (array_keys($modules) as $module) {
            if ($module === $default) {
                continue;
            }

            $bootstrapClass = $this->_formatModuleName($module) . '_Bootstrap';
            if (!class_exists($bootstrapClass, false)) {
                $bootstrapPath  = $front->getModuleDirectory($module) . '/Bootstrap.php';
                if (file_exists($bootstrapPath)) {
                    include_once $bootstrapPath;
                    if (!class_exists($bootstrapClass, false)) {
                        throw new Zend_Application_Resource_Exception('Bootstrap file found for module "' . $module . '" but bootstrap class "' . $bootstrapClass . '" not found');
                    }
                } else {
                    continue;
                }
            }

            $moduleBootstrap = new $bootstrapClass($bootstrap);
            $moduleBootstrap->bootstrap();
            $this->_bootstraps[$module] = $moduleBootstrap;
        }

        return $this->_bootstraps;
    }

Hors ligne

 

#27 27-08-2009 16:08:09

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Je vais tester tout ca.
Merci de ton aide.
Je te tiens au courant.

Hors ligne

 

#28 29-08-2009 20:51:16

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Hors ligne

 

#29 29-08-2009 21:24:30

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Merci pour les liens smile


aka miboo

Hors ligne

 

#30 29-08-2009 22:11:13

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Pas de koi!
Faut bien s'entraider ;-)

Hors ligne

 

#31 23-09-2009 15:10:10

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Bonjour,

Tout d'abord, merci pour ce post qui m'a éclaircit les idée sur ce sujet. smile
Mais il me reste encore des zones d'ombres?
voici mon arborecence :

application
    +-admin
        +-controllers
        +-models
        +-views
        -Bootstrap.php

    +-config
        -application.ini

    +-default
        +-controllers
        +-models
        +-views
        -Bootstrap.php

    -Bootstrap.php

le bootstrap "général" :

Code:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array('basePath'  => dirname(__FILE__),
                                                                   'namespace' => 'App_',
        
       return $autoloader;
    }

    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
        $view->addHelperPath('../application/views/helpers','App_View_Helper');
    }
    
     protected function _initHTMLView()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        
        $view->headLink()->appendStylesheet('/css/mainStyle.css');
        
        $view->headScript()->appendFile('/js/mainFonctions.js','text/javascript');
        
    }
}

Le Bootstrap du module default :

Code:

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{    
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'App_',
                                                                   'basePath'  => dirname(__FILE__)));
                
        return $autoloader;
    }
    
}

Le Bootstrap du module Admin :

Code:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{    
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'Admin_',
                                                                   'basePath'  => dirname(__FILE__)));
                
        return $autoloader;
    }
    
    protected function _initHTMLView()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        
        $view->headLink()->appendStylesheet('/css/mainAdmin.css');
        
        $view->headScript()->appendFile('/js/mainAdmin.js','text/javascript');
        
    }
}

Ma première question porte sur Zend_Application_Module_Autoloader :
Est ce que je doit comme ici initialiser le basepath et namespace dans le bootstrap général ou le faire dans le Bootstrap du module "Default" ?

La seconde question c'est celle qui me pose de problèmes :
J'aimerais  un _initHTMLView() different pour chaque modules, et ne pas l'initialiser dans le bootstrap "général"
mais lorsque je fais ça il ne charge aucuns style ni script ?

voici mon application .ini:

Code:

includePaths.library                                     = APPLICATION_PATH "/../library"
bootstrap.path                                           = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class                                          = "Bootstrap"
resources.frontController.controllerDirectory.default    = APPLICATION_PATH "/default/controllers"
resources.frontController.controllerDirectory.admin      = APPLICATION_PATH "/admins/controllers"
resources.modules[]                                      =
autoloaderNamespaces[]                                   = "My_"
resources.layout.layoutPath                              = APPLICATION_PATH "/default/views/layouts"
admin.resources.layout.layoutPath                        = APPLICATION_PATH "/admins/views/layouts"
resources.view[]                                         =
admin.resources.view[]                                   =

Je ne sait vraiment pas ou j'ai pas bon ? Je suis en train d'apprendre et c'est pas évident, ni très clair hmm
D'ailleurs j'ai vraiment la désagréable sensation de perdre le fil !! sad

Merci d'avance pour votre aide

Dede

Dernière modification par Dede (23-09-2009 15:12:32)


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#32 23-09-2009 15:19:12

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

1/ Perso, je laisse la ressource module fourni avec le ZF se charger de ca, donc, je ne sais pas te répondre
2/ Il suffit de na pas écrire de fonction _initView dans ton boostrap général (ou alors, j'ai pas compris)


----
Gruiiik !

Hors ligne

 

#33 23-09-2009 15:31:23

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

1/ Comment fait tu pour faire cela ?
2/ j'ai bien essayer de ne pas faire _initHTMLView() dans le Bootstrap principal mais cela ne fonctionne pas ?

Dede


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#34 23-09-2009 16:17:16

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

1/ Rien smile suffit qu'il y est resources.modules[] = dans ta config et l'autoloader pour module sera créé
2/ hmm.. pas d'explication la..


----
Gruiiik !

Hors ligne

 

#35 23-09-2009 16:27:26

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: Zend_1.8]: Chargement des modules avec Zend_Application et autoloader

Désolé mais ce n'est encore pas clair,
que dois-je mettre dans le _initAutoload() du bootstrap général ? car j'ai bien essayé de supprimer ces deux lignes :
$autoloader = new Zend_Application_Module_Autoloader(array('basePath'  => dirname(__FILE__).'/default',
                                                                   'namespace' => 'App_',
                                                                   ));
return $autoloader;

mais ça ne fonctionne plus du tout, et je pense que c'est normal.
dans cet _initAutoload() "général" j'ai des appel à d'autre fonctions static qui servent dans toute l'appli
Je cherche mais je devient maboul.

Dernière modification par Dede (23-09-2009 16:30:03)


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

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