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; } }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
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; } }) )
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 :
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"
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....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
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) )
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
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)); } } } }
Donc voila, si quelqu'un a une idée....
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)); } }
Partager