Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour tout le monde,
Il s'agit sûrement d'une question simple et récurrente, mais malgré mes nombreuses heures de recherche je n'ai pas réussi à faire fonctionner le tout.
Je voudrais placer certaines classes dans le répertoire /library/Tanuk/ et /library/Tanuk/Helpers/. Library étant au même niveau que "Application".
J'ai ceci dans mon fichier de config :
[production] appnamespace = "Application" autoloadernamespaces[] = "Tanuk_" bootstrap.class = "Bootstrap" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" includePaths.library = APPLICATION_PATH "/../library" phpSettings.date.timezone = "Europe/Paris" phpSettings.display_errors = 0 phpSettings.display_startup_errors = 0 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0
Malheureusement et malgré tous mes essais divers et variés, j'obtiens cette erreur (alors que l'IDE trouve tout de suite la classe)
Warning: include_once(Tanuk\Helper\Logger.php) [function.include-once]: failed to open stream: No such file or directory in C:\***\Zend\library\Zend\Loader.php on line 146 Warning: include_once() [function.include]: Failed opening 'Tanuk\Helper\Logger.php' for inclusion (include_path='C:\***\site\mysite\application/../library;C:\***\site\mysite\library;.;C:/***/Zend/library') in C:\***\Zend\library\Zend\Loader.php on line 146 Fatal error: Class 'Tanuk_Helper_Logger' not found in C:\***\site\mysite\application\Bootstrap.php on line 69
qui apparait lorsque j'execute cette ligne 69:
[lang=php]protected function _initLogger() { return Tanuk_Helper_Logger::initLogger(); }
Je m'arrache les cheveux là dessus depuis presque 2 jours. Comme vous l'aurez deviné je débute en Zend, et j'ai vraiment besoin de votre aide!
Si vous avez un éclair de génie... MERCI !
Dernière modification par Schyzophrenic (06-07-2011 19:59:04)
Hors ligne
Bonjour,
As-tu déclaré le namespace pour tes classes Tanuk_*, dans ton bootstrap ?
Sinon, tu dois y rajouter ceci :
[lang=php] /** Zend_Loader_Autoloader */ require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace( 'Tanuk_' );
Dernière modification par f.garoby (06-07-2011 10:46:19)
Hors ligne
Je pensais qu'à partir de la version 8 (je crois), nous n'avions plus besoin de spécifier ces informations dans le bootstrap mais qu'une ligne dans l'application.ini suffisait:
autoloadernamespaces[] = "Tanuk_"
Hors ligne
bonjour il me semble que tu as raison 'je suis novice sur ZF' peut ton voir comment tu declare tes class
De plus, il me semble que la position dans le application.ini est une importance donc essaye de depacer tes lignes aprés
includePaths.library = APPLICATION_PATH "/../library"
je comprend de ton erreur que les class qui doivent étendre tes class non pas était inclue Tu peux toujour essayé.
[production] bootstrap.class = "Bootstrap" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" includePaths.library = APPLICATION_PATH "/../library" appnamespace = "Application" autoloadernamespaces[] = "Tanuk_" phpSettings.date.timezone = "Europe/Paris" phpSettings.display_errors = 0 phpSettings.display_startup_errors = 0 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0
Dernière modification par damdamien (06-07-2011 11:34:48)
Hors ligne
Schyzophrenic a écrit:
Je pensais qu'à partir de la version 8 (je crois), nous n'avions plus besoin de spécifier ces informations dans le bootstrap mais qu'une ligne dans l'application.ini suffisait:
Code:
autoloadernamespaces[] = "Tanuk_"
Autant pour moi, j'avais zappé cette ligne de ton "application.ini" :-/
Hors ligne
C'est pas bien grave! f.garoby. C'est déjà sympa de te pencher sur mon problème.
Je ne sais pas si l'ordre des entrées dans le fichier.ini a une importance. Pour un souci de lisibilité, mes entrées sont classées par ordre alphabétique (par section [production], etc. quand même !).
Je testerai ça dès que possible, mais il me semble l'avoir déjà fait... Merci encore pour votre aide, si vous avez d'autres idées...
Hors ligne
Schyzophrenic a écrit:
C'est pas bien grave! f.garoby. C'est déjà sympa de te pencher sur mon problème.
Je ne sais pas si l'ordre des entrées dans le fichier.ini a une importance. Pour un souci de lisibilité, mes entrées sont classées par ordre alphabétique (par section [production], etc. quand même !).
Je testerai ça dès que possible, mais il me semble l'avoir déjà fait... Merci encore pour votre aide, si vous avez d'autres idées...
Je ne pense pas que l'ordre puisse avoir une quelconque importance, vu qu'au final, toutes les entrées d'une section sont lues (au plus tard au moment où on en demande une).
Hors ligne
Honnêtement, je ne sais plus trop quoi chercher / essayer pour résoudre ce problème
Hors ligne
Tu vois dans ton erreur que l'erreur est renvoyer par le Zend_loader à la ligne 146
a la ligne 146 de library->Zend->loader.php tu peus faire ca:
[lang=php] if ($once) { var_dump($filename); exit; include_once $filename; } else { include $filename; }
cela va te permettre de visualiser le chemin d'inclusion que Zend loader cherche a exploiter.
PENSE : a supprimer var_dump($filename); exit; des que tu as recuperer les données pour ne pas corrompre ton appli.
c'est un bon moyen de comprendre les erreurs de config que l'on peut faire.
Dernière modification par damdamien (06-07-2011 13:17:57)
Hors ligne
damdamien a écrit:
Tu vois dans ton erreur que l'erreur est renvoyer par le Zend_loader à la ligne 146
a la ligne 146 de library->Zend->loader.php tu peus faire ca:Code:
[lang=php] if ($once) { var_dump($filename); exit; include_once $filename; } else { include $filename; }cela va te permettre de visualiser le chemin d'inclusion que Zend loader cherche a exploiter.
PENSE : a supprimer var_dump($filename); exit; des que tu as recuperer les données pour ne pas corrompre ton appli.
c'est un bon moyen de comprendre les erreurs de config que l'on peut faire.
Pour aller plus et éviter à TOUS PRIX de modifier le core d'une librarie (quelqu'elle soit), je te conseille fortement d'utiliser Xdebug qui te permettra de faire du pas à pas et de voir le contenu de tes variables.
Hors ligne
Je confirme qu'intervertir les clés/ valeurs dans le fichier .ini n'a aucun impact, en tout cas sur ce problème.
Je suis d'accord sur le principe de ne pas modifier le core d'une lib. Cependant, j'avais essayé d'utiliser le debug de Zend sans succès à cause d'une incompatibilité entre ma version de PHP, d'Apache et de Zend.
Il faudra que je me penche sur l'installation / test de XDebug à ce sujet.
En attendant, j'ai rajouté ce code dans le Loader.php
[lang=php] echo $filename.'</br/>'; if ($once) { include_once $filename; } else { include $filename; }
Qui m'affiche ceci:
Zend\Config\Ini.php Zend\Application\Bootstrap\Bootstrap.php Zend\Application\Bootstrap\BootstrapAbstract.php Zend\Application\Bootstrap\Bootstrapper.php Zend\Application\Bootstrap\ResourceBootstrapper.php Zend\Application\Module\Autoloader.php Zend\Loader\PluginLoader.php Zend\View.php Zend\Controller\Action\HelperBroker.php Zend\Registry.php Tanuk\Helper\Logger.php Warning: include_once(Tanuk\Helper\Logger.php) [function.include-once]: failed to open stream: No such file or directory in C:\***\Zend\library\Zend\Loader.php on line 147 Warning: include_once() [function.include]: Failed opening 'Tanuk\Helper\Logger.php' for inclusion (include_path='C:\***\site\mysite\application/../library;C:\***\site\mysite\library;.;C:/***/Zend/library') in C:\***\Zend\library\Zend\Loader.php on line 147 Fatal error: Class 'Tanuk_Helper_Logger' not found in C:\***\site\mysite\application\Bootstrap.php on line 69
J'ai alors renommé mon répertoire helpers en Helper. Voici d'ailleurs mon arbo actuelle:
/application
/library
/Tanuk
/Helper
Logger.php
où je décris la classe
[lang=php] abstract class Tanuk_Helper_Logger {...}
Et tout de suite, cela marche beaucoup mieux.
Mon erreur était donc d'avoir cru qu'il fallait mettre un "s" à la fin des répertoires, comme dans l'arborescence helpers, forms etc de l'application principale!
Merci pour votre aide, mine de rien, ça m'a bien aidé pour trouver cette erreur de débutant !
Dernière modification par Schyzophrenic (06-07-2011 19:23:17)
Hors ligne
Pages: 1