Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour tout le monde (et bonne année),
Je travaille actuellement sur un projet en ZF dans le cadre de mes études et je suis confronté à un problème assez génant.
Je vais vous expliquer le contexte : nous avons établie une struture séparé en module (Frontend et Backend). Je travaille en local avec cette structure et une fois qu'une partie du travail est fini, j'upload le tout sur le serveur.
J'ai développer en local un système utilisant les acl (qui fonctionne) mais une fois uploadé sur le serveur celui-ci me déclare une erreur de chargement de ma classe. Le projet étant à un stade assez avancé, je pensais 'maitriser' le système d'autoload mais apparemment ce n'était pas le cas.
Ma structure en local est strictement identique à celle utilisée sur le serveur.
Voici comment je procède pour enregistrer une classe :
-> création d'un dossier dans le dossier models d'un module
-> j'enregistre un autoloadernamespace correspondant au nom du dossier dans le application.ini
La tête de la partie autoload du bootstrap frontale :
protected function _initAutoload() { $autoloader = Zend_Loader_Autoloader::getInstance(); //cette classe ne se charge pas sur le serveur $acl = new List_Access() ; $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()) { Zend_Registry::set('droit',Zend_Auth::getInstance()->getStorage()->read()); } else { Zend_Registry::set('droit','visiteur'); } $fc = Zend_Controller_Front::getInstance(); $fc->registerPlugin(new Plugin_AccessCheck($acl,$auth)); }
Voici l'un des boostrap de chaque module :
protected function _initAutoload() { //On enregistre les modules (les parties de notre application), souvenez-vous : Backend et Frontend $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $loader; }
application.ini
.... includePaths.library = APPLICATION_PATH "/../library" includePaths.models = APPLICATION_PATH "/modules/backend/models" includePaths.models = APPLICATION_PATH "/modules/frontend/models" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" autoloadernamespaces[] = "Table" autoloadernamespaces[] = "Forms" autoloadernamespaces[] = "Auth" autoloadernamespaces[] = "Mail" autoloadernamespaces[] = "List" autoloadernamespaces[] = "Plugin" ;Définition des différents modules de l'application resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules[] = "backend" resources.modules[] = "frontend" ;Définition et configuration du module par défaut du projet resources.frontController.defaultModule = "frontend" resources.frontController.defaultControllerName = "index" resources.frontController.defaultAction = "index" resources.frontController.useDefaultControllerAlways = true resources.frontController.params.displayExceptions = 0 ....
La structure que j'utilise :
Si vous avez une idée pour résoudre ce problème, un conseil pour l'autoload ou une remarque sur la façon dont j'utilise les modules, n'hésitez pas à m'en parler.
Merci d'avance.
Hors ligne
J'ai essayé de charger dans le bootstrap une classe qui normalement ne pose pas de problème, mais celle-ci ne se charge pas non plus.
Je pense donc que mon problème se situe principalement au niveau de l'autoload, je vais continué de tester de mon côté.
Vos idées et suggestions sont les bien venues.
Hors ligne
Les 2 environnements (prod et dev) sont-ils identiques ?
Notamment si la prod est sur linux la casse des fichiers est importante, ce qui n'est pas le cas sous windows.
Hors ligne
Bonsoir, merci pour votre réponse.
Les deux environnements sont effectivement identique. (et je dev' sous linux )
Hors ligne