Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-04-2011 22:08:23

fhebert
Membre
Date d'inscription: 30-11-2010
Messages: 20

[ZFPATH] cannot redeclare class Zend_Loader_Autoloader

Bonjour à tous,

je veux utiliser le système "zfpath" pour configurer l'include path dynamiquement.

Le problème que je rencontre est le suivant : pour définir le zfpath je dois avant instancier
Zend_Loader_Autoloader et donc charger un fichier Zend/Loader/Autoloader.php dans
mon fichier public/index.php.

Or il se trouve qu'à ce moment du chargement de l'application l'include path pointe
vers une installation différente - en l'occurence celle de Zend Server - de l'installation "versionée".

Dans mon fichier public/index.php :

Code:

[lang=php]
/**
 * Zend_Loader instanciation
 * get from the Zend Server installation
 */
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setZfPath(SYSTEM_LIBRARY_PATH . DIRECTORY_SEPARATOR . 'ZendFramework' . DIRECTORY_SEPARATOR, '1.10.8');

Le fichier 'Zend/Loader/Autoloader.php' inclut à son tour le fichier 'Zend/Loader.php'. À ce moment il
s'agit de /usr/local/zend/share/ZendFramework/Zend/Loader.php.

Or, j'obtiens une erreur fatale PHP lors de l'exécution de l'application.

Code:

PHP Fatal error:  Cannot redeclare class Zend_Loader in /usr/local/share/php/ZendFramework/1.10.8/library/Zend/Loader.php on line 31

Le fichier Zend/Loader.php est chargé deux fois lors du chargement
de l'application. Ceci dû au fait que les fichiers sources ne sont pas les mêmes.

/usr/local/zend/share/ZendFramework/Zend/Loader.php dans le cas de la construction
de l'instance de l'autoloader dans le fichier index.php.

/usr/local/share/php/ZendFramework/1.10.8/library/Zend/Loader.php dans la fonction __construct
de Zend_Application une fois le ZfPath défini et l'include path modifié.

Code:

[lang=php]
  public function __construct($environment, $options = null)
    {
        $this->_environment = (string) $environment;

        require_once 'Zend/Loader/Autoloader.php';
        $this->_autoloader = Zend_Loader_Autoloader::getInstance();

        if (null !== $options) {
            if (is_string($options)) {
                $options = $this->_loadConfig($options);
            } elseif ($options instanceof Zend_Config) {
                $options = $options->toArray();
            } elseif (!is_array($options)) {
                throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array');
            }

            $this->setOptions($options);
        }
    }

La seule solution que j'ai trouvée pour l'instant c'est de créer un lien symbolique pointant vers la version "1.10.8"
court-circuitant ainsi la version zend server. Mais je la trouve plutôt inélégante et contradictoire avec la philo zfpath.

Une idée ?

Frédéric

Dernière modification par fhebert (24-04-2011 22:08:46)

Hors ligne

 

#2 26-04-2011 09:00:35

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

Re: [ZFPATH] cannot redeclare class Zend_Loader_Autoloader

A mon avis tu sera obligé de changer ton include_path à la main pour que ça soit toujours la même librairie ZF qui soit appelée.
Tu peux le faire avec une commande set_include_path du genre :

Code:

[lang=php]
set_include_path(
    implode(
        PATH_SEPARATOR,
        array(
            /usr/local/share/php/ZendFramework/1.10.8/library,
            get_include_path(),
        )
    )
);

A+, Philippe


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

Hors ligne

 

#3 26-04-2011 11:31:46

fhebert
Membre
Date d'inscription: 30-11-2010
Messages: 20

Re: [ZFPATH] cannot redeclare class Zend_Loader_Autoloader

C'est ce que j'ai fini par me dire aussi.
Du coup la fonction zfPath ne sert strictement
à rien si l'on doit bidouiller manuellement l'include path. Non ?

Bizarre bizarre comme dirait l'autre !

En tout cas merci de ta réponse !

Frédéric

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