Bonjour,

A l'heure actuelle, j'essaye de passé une application déjà développer avec un bootsrap de type "tous dans le fichier index.php" à un boostrap de type "Zend_Application". Pour ce faire j'ai utilisé les divers tuto trouvé sur le net et l'aide de manuscle (encore merci ) j'ai réalisé ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// index.php
 
error_reporting(E_ALL|E_STRICT);
 
// Définit l'environnement de l'application 
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath('/home/wwwroot/library'),
    realpath(APPLICATION_PATH.'/modules'),
    get_include_path()
)));
 
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
 
// Création de l'application
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH.'/../config/config2.ini');
$application->bootstrap()->run();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
// application/Bootstrap.php
 
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected $_registry;
    protected $_config;
 
    protected function _initDefaultNamespace(){
        $this->bootstrap('frontcontroller');
        $fc = $this->getResource('frontcontroller');
        $defaultModule = $fc->getControllerDirectory($fc->getDefaultModule());
        new Zend_Application_Module_Autoloader(
            array(
                'namespace' => '', // pas de namespace
                'basePath'  => APPLICATION_PATH . $defaultModule,
             )
        );
        new Zend_Application_Module_Autoloader(
            array(
                'namespace' => 'Admin_', // pas de namespace
                'basePath'  => APPLICATION_PATH . '/modules/admin',
             )
        );        
    }
 
    //initilisation de la configuration
    protected function  _initConfiguration(){
        $config = new Zend_Config($this->getOptions(), 'production');
        $this->_config = $config;
        $this->_registry = Zend_Registry::getInstance();
        $this->_registry->set('config', $config);
 
        return $config;
    }
 
    //initilisation de la structure MVC
    protected function _initView(){
 
        Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
 
        $view = new Zend_View();
        $view->setEncoding('UTF-8');
        $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
        Zend_Layout::startMvc(array('layout'=>'front-office' ,'layoutPath'=>APPLICATION_PATH."/../layouts/site/"));
        $mvc = Zend_Layout::getMvcInstance();
        $this->_registry->set('mvc', $mvc);
        return $view;
    }
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
// application/module/admin/bootstrap.php 
 
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
    protected $_config;
    protected $_registry;
 
    public function __construct($application){
        parent::__construct($application);
 
        $this->_config = Zend_Registry::get('config');
        $this->_registry = Zend_Registry::getInstance();
    }
 
    //initilisation des connection a la base de donnée
    public function activeInitDatabase(){
        try{
            $db = Zend_Db::factory($this->_config->db);
            //on test si la connection se fait
            $db->getConnection();
        } catch( Exception $e ){
            exit( $e -> getMessage() );
        }
        Zend_Db_Table::setDefaultAdapter($db);
        $this->_registry->set('dbAdapter', $db);
        return $db;
    }
 
 
    //initilisation de l'authentification
    public function activeInitAuth(){
 
        $storage = new Zend_Auth_Storage_Session();
        $sessionNamespace = new Zend_Session_Namespace($storage->getNamespace());
        $sessionNamespace->setExpirationSeconds(3600);
        $this->_registry->set('session', $sessionNamespace);
 
        $auth = Zend_Auth::getInstance();
        $auth->setStorage($storage);
        $acl = new AccessRules($auth);
        $this->_registry->set('auth', $auth);
        $this->_registry->set('acl', $acl);
        return $auth;
    }
 
    //initilisation des controller frontal
    public function activeInitFrontController(){
        $frontController = $this->getApplication()->bootstrap('frontController')->getResource('frontController');
        $frontController->registerPlugin(new Common_Plugin_AuthAnnonces($this->_registry->get('auth'), $this->_registry->get('acl')))
            ->registerPlugin(new Common_Plugin_Layout($this->_registry->get('auth'), $this->_registry->get('mvc')))
            ->registerPlugin(new Plugins_Famille($this->_registry->get('auth')))
            ->setControllerDirectory(APPLICATION_PATH.'/modules/admin/controllers');            
        return $frontController;
    }
}
et le config de tous ça (avec 2/3 infos de moins (qui a dis infos de connexion à la db ? ) )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
[production]
;définition des variable pour l'environement de production
 
# initilisation du report d'erreurs pour le mode production 
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpsettings.date.timezone = "Europe/Paris"
 
# Bootstrap
bootstrap.path  = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
 
resources.frontController.throwexceptions = true
resources.frontController.plugins.Common_Plugin_ModuleConfig = Common_Plugin_ModuleConfig
resources.frontController.plugins.Common_Plugin_IncludePath = Common_Plugin_IncludePath
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
resources.frontController.defaultModule = "default"
 
 
resources.modules[] = "";
resources.modules.admin = APPLICATION_PATH "/modules/admin"
Mais voila, j'ai bien l'affichage de mon layout, mais avec dedans un chouette "warning" php (qui me pose problème pour la gestion de la session de mon module admin) qui me dit :

Warning: Zend_Loader::include(FrontController.php) [zend-loader.include]: failed to open stream: No such file or directory in /home/wwwroot/library/Zend/Loader.php on line 83

Warning: Zend_Loader::include() [function.include]: Failed opening 'FrontController.php' for inclusion (include_path='/home/wwwroot/library:/home/wwwroot/aws-annonce/application/modules:.:/usr/share/php:/usr/share/pear') in /home/wwwroot/library/Zend/Loader.php on line 83
Du coup, j'ai essayé plusieurs choses, comme faire un FrontController personnalisé (vide...), écrire une fonction d'initialisation "_init" à la mano mais la impossible de charger quoi que se soit....

Ah oui, je précise aussi que j'utilise un plugin de pour exécuter les fonctions des bootstraps de modules "on demand" ( celui donnée dans le blog de BinaryKitten ( merci à lui ) )

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
// plugin de chargement du bootstrap spécifique de BinaryKitten
 
<?php
class Common_Plugin_ModuleConfig extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $activeModuleName = $request->getModuleName();
 
        $frontController = Zend_Controller_Front::getInstance();
        $bootstrap =  $frontController->getParam('bootstrap');
        //$application = Zend_Registry::get('application');
        //$bootstrap = $application->getResource('frontController');
 
        $moduleList = $bootstrap->getResource('modules');
 
        $moduleInitName = strtolower($activeModuleName)."Init";
        $moduleInitNameLength = strlen($moduleInitName);
 
        if (isset($moduleList[$activeModuleName])) {
            $activeModule = $moduleList[$activeModuleName];
 
            $bootstrapMethodNames = get_class_methods($bootstrap);
            foreach ($bootstrapMethodNames as $key=>$method) {
                $runMethod = false;
                $methodNameLength = strlen($method);
                if ($moduleInitNameLength < $methodNameLength &&
                    $moduleInitName == substr($method, 0, $moduleInitNameLength)) {
                    call_user_func(array($bootstrap,$method));
                }
            }
        } else {
            $activeModule = $bootstrap;
        }
 
        $methodNames = get_class_methods($activeModule);
        foreach ($methodNames as $key=>$method) {
            $runMethod = false;
            $methodNameLength = strlen($method);
            if (10 < $methodNameLength && 'activeInit' === substr($method, 0, 10)) {
                $runMethod = true;
            } elseif ($moduleInitNameLength < $methodNameLength &&
                    $moduleInitName == substr($method, 0, $moduleInitNameLength)) {
                $runMethod = true;
            }
            if ($runMethod) {
                call_user_func(array($activeModule,$method));
            }
        }
    }
}
et un second de mon cru qui me permet juste de rajouter le path de mes models et library spécifique par modules dans l'include path php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<?php
class Common_Plugin_IncludePath extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $activeModuleName = $request->getModuleName();
 
        $moduleList = explode(PATH_SEPARATOR, get_include_path());
 
        foreach($moduleList as $lepath){
            $regR = array();
 
            if(ereg("^.*\/modules\/([a-zA-Z0-9]*)\/[a-zA-Z0-9]*$", $lepath, $regR)){
                $lepath = "";
            }
        }
 
        $moduleList[] = APPLICATION_PATH."/modules/".$activeModuleName."/models";
        $moduleList[] = APPLICATION_PATH."/modules/".$activeModuleName."/library";
 
        set_include_path(implode(PATH_SEPARATOR, $moduleList));        
    }
}
Donc voila, si quelqu'un a une idée....