Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un petit soucis avec mon application.
J'ai essayé de mettre ne place une architecture modulaire. (architecture normale, rien d'exotique)
Pour le moment mon application marchait bien car j'avais un unique Bootstrap.
Depuis quelques jour je tente de construire un Bootstrap par module pour que l'initialisation de chaque modules soit complètement dissocié.
Au premier abord tout fonctionne bien, le petit bémol c'est que j'ai essayé de regarder si le bootstrap du module appelé était effectivement bien appelé (et pas un autre). Finalement, je me suis rendu compte que l'ensemble des bootstrap de mes modules étaient exécute!
Voici une partie de mon application.ini :
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.date.timezone = "Europe/Paris" includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" cache.timecache = 0 resources.modules[] = "" resources.frontController.defaultModule = default resources.frontController.controllerDirectory.default = APPLICATION_PATH "/modules/default/controllers" resources.frontController.controllerDirectory.calcul = APPLICATION_PATH "/modules/calcul/controllers" resources.frontController.controllerDirectory.essai = APPLICATION_PATH "/modules/essai/controllers" resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts/"
Merci d'avance
Phil
Dernière modification par Phil (05-11-2009 10:50:55)
Hors ligne
Re
Pour le moment j'ai pu redéfinir le plugin pour le chargement des bootstrap du module, cela vous aidera à mieux comprendre mon problème.
Voici le code de mon plugin pour le boostrap modulaire :
<?php /** * Chargement de boostrap d'un module * @category My * @package My * @subpackage My_Application */ class My_Application_Resource_Modules extends Zend_Application_Resource_Modules { /** * Initialisation du module * @return array */ public function init(){ //Recupération du module en cours $uri = $_SERVER["REQUEST_URI"]; $tabUri = explode('/', $uri); $bootstrap = $this->getBootstrap(); $bootstrap->bootstrap('FrontController'); $front = $bootstrap->getResource('FrontController'); $module = $tabUri[1]; if (!$front->getModuleDirectory($module)){ $module = $front->getDefaultModule(); } //Chargement du bootstrap du module $modulesDirs = $front->getControllerDirectory(); $modulePath = dirname($modulesDirs[$module]).'/Bootstrap.php'; include_once $modulePath; $moduleName = $this->_formatModuleName($module); $bootstrapClass = $moduleName.'_Bootstrap'; //Execution $moduleBoostrap = new $bootstrapClass($bootstrap); $moduleBoostrap->bootstrap(); return $this->_bootstraps[$module] = $moduleBootstrap; } }
et biensur j'ai du faire des petites modifications sur mon application.ini :
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.date.timezone = "Europe/Paris" includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" cache.timecache = 0 resources.modules[] = "" pluginPaths.My_Application_Resource = APPLICATION_PATH "/library/My/Application/Resource" resources.frontController.defaultModule = default resources.frontController.controllerDirectory.default = APPLICATION_PATH "/modules/default/controllers" resources.frontController.controllerDirectory.calcul = APPLICATION_PATH "/modules/calcul/controllers" resources.frontController.controllerDirectory.essai = APPLICATION_PATH "/modules/essai/controllers" default.resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts/"
Voilà ce n'est qu'un brouillon pour le moment.
Si vous connaissez la solution 'Native' du Framework pour faire la même chose...
Je suis preneur!
Merci @++ Phil
Dernière modification par Phil (04-11-2009 17:39:37)
Hors ligne
il me semble que dans les explications de zend, en natif le bootstrap principal exécute tous les boostrap de module pour trouver le bon. Je peux bien sûr me tromper.
Hors ligne
@thorin19 : c bien ça
Tous les bootstraps de modules sont parcourus. Car à cet instant précis, le routage n'a pas encore été effectué donc le module courant n'est pas connu.
Hors ligne
Ok, donc je suis obligé d'utiliser ma solution pour séparer l'exécution de chacun des bootstrap...
Il n'y a pas d'autre alternative...?
Hors ligne
Je n'ai pas bien compris ton problème. Pourquoi faire un micro-routage avant le routage ? Qu'est-ce qui t'empêche de charger toutes tes ressources de modules ?
Hors ligne
En fait je veux séparer mon application dans un module, et dans un autre la partie exécutée en ligne de commande (la partie calcul). Or je ne souhaite pas que certaines fonctions de mon bootstrap soient éxécutées.
Si je laisse le plugin de chargement des modules tel quel... J'ai le layout du module de default qui vient parasiter le module de calcul (ou je n'ai pas définit le layout).
Je pense que c'est plus logique que chacun des module ait seulement son Bootstrap d'éxecuté et non pas l'ensemble des bootstrap..
et que la partie commune soit définie uniquement dans le Bootstrap principal.
Enfin je me trompe peut être ^^'
Dernière modification par Phil (05-11-2009 09:49:09)
Hors ligne
Dans un cas similaire (grosso-modo), j'ai 2 points d'entrée l'index.php qui charge la partie "Web" et dans un dossier hors web update.php qui s'occupe de la partie mise à jour en ligne de commande.
Ces 2 fichiers appellent le même Bootstrap.php mais chargent les ressources différemment.
Hors ligne
C'est ce que j'ai... j'ai créé un cli.php pour s'occuper de la ligne de commande. et je rentre à l'aide d'un bootstrap identique. Je ne comprend pas pourquoi le layout du module par défaut parasite l'autre...
Dernière modification par Phil (05-11-2009 10:12:56)
Hors ligne
Même bootstrap ne veut pas dire pour moi, même application.ini. Pour la partie cli, je ne charge pas toutes les ressources de la partie Web seulement celles qui sont nécessaires.
Hors ligne
Hum c'est donc ça l'astuce ^^!
J'vais essayer de revoir mon archi
Merci ^^
Hors ligne
Pages: 1