Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-04-2008 03:32:25

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Les majuscules me pourrisent la vie !

Bonjour à tous smile

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

Code:

APP
+- customer
  +- controllers
       +- AccountController.php
  +- Model
       +- Customer.php
...

Mon code suivant pose problème :

Code:

$model = new APP_Customer_Model_Customer();

Me provoque l'erreur suivante :

Code:

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 smile

Hors ligne

 

#2 09-04-2008 07:32:29

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Les majuscules me pourrisent la vie !

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

 

#3 09-04-2008 09:32:34

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: Les majuscules me pourrisent la vie !

Hors ligne

 

#4 09-04-2008 16:02:46

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

Merci pour vos réponses rapides smile

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:

Code:

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 :

Code:

/**
 * @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 :

Code:

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

 

#5 09-04-2008 20:30:18

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

Up ? Pas d'aide ? Pas d'idées ?

Hors ligne

 

#6 10-04-2008 11:36:08

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Les majuscules me pourrisent la vie !

As tu bien nommé ta classe ?

Customer_AccountController ?

As tu bien nommé ton action (fonction) dans ta classe comme il faut ?
function actionACtion() {}


----
Gruiiik !

Hors ligne

 

#7 10-04-2008 16:08:35

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

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

 

#8 10-04-2008 16:16:27

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: Les majuscules me pourrisent la vie !

é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)


IT Dev @Twitter

Hors ligne

 

#9 10-04-2008 16:33:45

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

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

 

#10 10-04-2008 17:02:49

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

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

 

#11 10-04-2008 17:16:52

OrangeKarma
Nouveau membre
Date d'inscription: 10-04-2008
Messages: 6

Re: Les majuscules me pourrisent la vie !

perso, mes répertoires de modules sont tous en "lowercase"!

Hors ligne

 

#12 10-04-2008 17:24:34

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Les majuscules me pourrisent la vie !

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

Code:

/
-- /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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#13 10-04-2008 18:28:49

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Les majuscules me pourrisent la vie !

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

 

#14 11-04-2008 16:35:06

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Les majuscules me pourrisent la vie !

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages