Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
[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.
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é.
[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
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 :
[lang=php] set_include_path( implode( PATH_SEPARATOR, array( /usr/local/share/php/ZendFramework/1.10.8/library, get_include_path(), ) ) );
A+, Philippe
Hors ligne
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
Pages: 1