Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-08-2009 05:00:06

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

[Zend_Loader] Autoload et collision de namespaces

Salut a tous

Ayant quelques problèmes de chargement de classes, j'ai du fouiner un peu de code source de Zend_Loader_Autoloader pour trouver la source.
Voila le problème :

- J'utilise les modules, j'ai bien défini ma classe Module_Bootstrap dans chaque modules, d'ailleurs ca marche très bien dans mon module news, shop, etc...
- Ayant fait pas mal de modifs de fond je repasse un coup sur mon module newsletters que j'avais pas encore mis à jour et la impossible de charger mes classes Table du model (pourtant d'autres classes du meme module ont deja été chargées)

il y a un endroit ou j'appelle dynamiquement une classe de table :

Code:

new $maClassTable();

$maClassTable ayant la bonne valeur mais, comme j'ai enregistrer plusieurs autoloader (1 par module, en particulier News_ et Newsletters_ ) du coup

Code:

Zend_Loader_Autoloader::getClassAutoloaders()

qui utilise strpos($class, $namespace) trouve que mes classes newsletters doivent etre cherchées dans le module news. (effectivement strpos('newsletters', 'news') => bingo ! )

J'en conclu donc qu'on ne peut pas avoir 2 modules utilisant l'autoloader ZF avec des noms qui s'imbriquent (Foo et FooBar c'est mort ! )

C'est pas tant un problement j'ai qu'a changer qq noms de classe pour transformé mon module news en actus mais je me demandais qd meme si c'est un comportement normal quand on parle de namespace (par exemple dans zend_session_namespace, dans les nouveau namespace de 5.3 ou autre ... ) ou est ce que ca ressemble plus à un p'tit bug ?

voila ca peut p'tet eviter une séance de prise de tete au debugger pour certains qui auraient betement comme moi appelé leur modules news et newsletters smile

++

Dernière modification par tomtom (06-08-2009 05:01:18)

Hors ligne

 

#2 21-08-2009 16:05:58

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: [Zend_Loader] Autoload et collision de namespaces

Merci de l'information !

Je ne vois pas dans quel cas de figure cette condition peut s'avérer utile.
Je ne sais pas comment on peut remonter ce genre d'info, qui est un bug en soit à mon avis. A moins que quelqu'un comprenne l'utilité de cette forme ?

Les namespaces concrets ayant toujours la forme namespace_* il faudrait à mon avis

Code:

// remplacer
if (0 === strpos($class, $ns))

// par
if (0 === strpos($class, $ns . '_'))

// ou par
if (array_shift(explode('_', $class)) === $ns))

Je n'ai pas trouvé de moyen de spécifier une nouvelle classe en guise d'autoloader pour Zend_Application, Zend_Loader_Autoloader semble devoir être utilisé dans surcharge possible.

Dernière modification par Eureka (21-08-2009 16:09:07)

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