Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous
Voilà, je galère sur une connerie de majuscules pour un nom de répertoire.
Je m'explique :
- J'utilise une structure de répertoire pour accueillir des modules/controllers.
- Chaque répertoire est nommé sans majuscules pour que le Zend_Loader soit apte à aller chercher les fichiers au bon endroit.
Voici l'architecture minimale pour illustrer mon problème
APP +- customer +- controllers +- AccountController.php +- Model +- Customer.php ...
Mon code suivant pose problème :
$model = new APP_Customer_Model_Customer();
Me provoque l'erreur suivante :
Warning: Zend_Loader::include_once(APP/Customer/Model/Customer.php) [function.Zend-Loader-include-once]: failed to open stream: No such file or directory in /var/htdocs/APP/library/Zend/Loader.php on line 83
Lorsque je passe le nom du repertoire de mon module "customer" avec une majuscule "Customer", c'est maintenant dans mon URL que ça passe plus quand je tappe "http://localhost/APP/customer/account/action"
Un problème de majuscule qui a son importance. Il semblerait que je dois faire quelque chose mal...
Sinon, peut être y a t'il un moyen de dire à Linux de pas faire la différence sur les majuscules ?
MErci
Hors ligne
C'est le contraire tout les fichier et dossier doivent avoir une majuscule et une seule pour que Zend_Loader retrouver ces petits
Seule les chemins placés dans le include_path peuvent s'écrire différemment
et chose étrange les vues ne respectent cette règle. en 1.0.x tout en minuscule et en 1.5 en CamelCase
c'est une chose que je n'ai pas compris pourquoi inventer deux système de nommange dans un même framework
A+JYT
Hors ligne
Ceci aidera peut être ?
http://framework.zend.com/manual/en/zen … htoonefive
Hors ligne
Merci pour vos réponses rapides
J'ai bien lu tout ce qu'il y avait dans ton lien Julien, seulement bien que je respecte tout ce qu'il y a d'écrit, un problème subsiste.
J'ai donc bien écouté vos conseils et voici ma nouvelle architecture:
APP +- code +- Customer +- controllers +- AccountController.php +- Model +- Customer.php +- design +- views +- customer +- scripts +- account +- action.phtml ...
On constate maintenant que mes noms de dossiers pour les modules/controllers ainsi que mes fichiers respectent bien la règle des majuscules alors que mes views, sont en minuscules.
Jusqu'ici, j'ai configuré mon app. comme suit :
/** * @file bootstrap.php */ (...) define('BASE_URI', 'http://localhost/'); iconv_set_encoding('internal_encoding', 'utf-8'); // Error Handler $errorHandler = new Zend_Controller_Plugin_ErrorHandler(); $errorHandler->setErrorHandlerModule('Error'); // View Renderer $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer->setViewBasePathSpec(self::getPath('application/design/views') . ':module'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); // Router $router = new Zend_Controller_Router_Rewrite(); $router->addConfig($config, 'routes'); // Controller Front self::$_frontController = Zend_Controller_Front::getInstance(); self::$_frontController->setRouter($router); self::$_frontController->setDefaultModule('Core') ->addModuleDirectory('XXX/APP/code') ->registerPlugin($errorHandler, 100); (...)
Cependant, lorsque j'accède à mon url : "http://localhost/customer/account/action", ça me provoque l'erreur suivante :
Invalid controller specified (customer)
Il me faut donc y accéder par cette url : "http://localhost/Customer/account/action" pour que tout fonctionne !
Problématique...
Dernière modification par apsy (09-04-2008 16:04:11)
Hors ligne
Up ? Pas d'aide ? Pas d'idées ?
Hors ligne
As tu bien nommé ta classe ?
Customer_AccountController ?
As tu bien nommé ton action (fonction) dans ta classe comme il faut ?
function actionACtion() {}
Hors ligne
Oui, tout bien fait ! Je trouve étrange que le dispatcher de Zend ne rajoute pas de majuscule à mon action. De plus, je croyais que PHP était "case insensitive" ??? On dirait bien que non...
Hors ligne
étrange ! jai personnellement essayé avec ou sans majuscule dans le nom des modules et controlleurs, aucun problèmes !
cela proviens p-e de la gestion de la case de ton/mon navigateur/serveur web et pas du framework ?
Dernière modification par lethak (10-04-2008 16:16:39)
Hors ligne
Chose étrange... Mon controller "error" récupere bien l'erreur pourtant celui ci est dans un répertoire avec une majuscule. Autre chose étrange, quand je "dump" l'objet d'erreur, pour une url comme celle là : "customer/account/action", le ZF considère "customer" comme un controller et non comme un module ! Mais lorsque je mets une majuscule : "Customer/account/action", il le considere bien comme un module.
Je pense que le dispatcher teste l'existence du répertoire ("case sensitive" du coup car sous linux) avec le nom "customer" mais vu que mon répertoire a une majuscule, il le trouve pas et bascule donc sur la route ":controller/:action" d'ou l'erreur "Invalid controller (customer)"...
Cependant, ça résoud pas encore mon problème. Y'a un pro du ZF capable de me dire comment le dispatcher se débrouille pour savoir si le répertoire à une majuscule ou non ? Vu que Linux fait la différence sur ces fichiers des majuscules/minuscules...
Dernière modification par apsy (10-04-2008 16:34:12)
Hors ligne
Est-ce que vous pouvez me confirmer qu'il faut bien une majuscule aux noms des repertoires des modules ?
Car sur la doc, ils n'en mettent pas...
Hors ligne
perso, mes répertoires de modules sont tous en "lowercase"!
Hors ligne
Bonjour apsy,
A priori, il n'y a pas de raison de mettre une majuscule à tes modules. Par contre tu lies de façon forte ton arborescence et ton modèle. En fait c'est ça qui t'impose la majuscule.
Ma méthode n'est pas meilleure que la tienne, mais elle ne m'impose rien sur les modules et elle fait une arborescence plus compliquée.
Voilà mon arbo
/ -- /applications ---- /forum (c'est un module) ------ /controlleurs -------- IndexController.php -------- MessageController.php ------ /model -------- /Kitpages ---------- /Forum ------------ Topic.php ------------ Forum.php ------------ Facade.php ---- /member (autre module) -- /docRoot ---- index.php -- /views ---- /forum ------ /index -------- index.phtml ---- /member
ensuite tu fais pointer ton include_path sur le modèle de chaque module. Pour accéder à la classe Topic de mon forum, je fais un loadClass("Kitpages_Forum_Topic");
Mon module est bien en minuscule.
A+, Philippe
Hors ligne
C'est effectivement pas toujours très clair
mais tes modules doivent être dans un dossier avec une Majuscule
donc le addModule reçois quelque chose comme Fast_Modules/Adm/Controllers
seul le dossier Controllers peux ne pas avoir de majuscule
tout ce qui entre dans le nom de la classe doit avoir une majuscule.
lorsque tu déclare ton module avec addControllerDirectory le nom du module doit être en minuscule
A+JYT
Hors ligne
Pas génial tout ça ! Y'a les partisants de la majuscule sur le nom du dossier pour les modules, et ceux qui n'en mettent pas ! :s
Je pensais pouvoir faire marcher mon Zend_Loader sans avoir à me taper la redéfinition de tous mes modules avec l'include_path, mais je crois que je vais devoir y passer.
Hors ligne