Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-07-2011 22:53:56

Schyzophrenic
Membre
Date d'inscription: 05-07-2011
Messages: 12

[Résolu][1.11] Autoload et classe personalisée

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 :

Code:

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

Code:

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:

Code:

[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 ! big_smile

Dernière modification par Schyzophrenic (06-07-2011 19:59:04)

Hors ligne

 

#2 06-07-2011 10:45:59

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [Résolu][1.11] Autoload et classe personalisée

Bonjour,
As-tu déclaré le namespace pour tes classes Tanuk_*, dans ton bootstrap ?
Sinon, tu dois y rajouter ceci :

Code:

[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

 

#3 06-07-2011 10:55:18

Schyzophrenic
Membre
Date d'inscription: 05-07-2011
Messages: 12

Re: [Résolu][1.11] Autoload et classe personalisée

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_"

Hors ligne

 

#4 06-07-2011 11:05:41

damdamien
Membre
Date d'inscription: 02-07-2011
Messages: 22

Re: [Résolu][1.11] Autoload et classe personalisée

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

Code:

[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

 

#5 06-07-2011 11:18:06

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [Résolu][1.11] Autoload et classe personalisée

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

 

#6 06-07-2011 11:33:34

Schyzophrenic
Membre
Date d'inscription: 05-07-2011
Messages: 12

Re: [Résolu][1.11] Autoload et classe personalisée

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

 

#7 06-07-2011 11:45:46

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [Résolu][1.11] Autoload et classe personalisée

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

 

#8 06-07-2011 11:46:52

Schyzophrenic
Membre
Date d'inscription: 05-07-2011
Messages: 12

Re: [Résolu][1.11] Autoload et classe personalisée

Honnêtement, je ne sais plus trop quoi chercher / essayer pour résoudre ce problème sad

Hors ligne

 

#9 06-07-2011 12:03:21

damdamien
Membre
Date d'inscription: 02-07-2011
Messages: 22

Re: [Résolu][1.11] Autoload et classe personalisée

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.

Dernière modification par damdamien (06-07-2011 13:17:57)

Hors ligne

 

#10 06-07-2011 15:53:50

bgy
Membre
Lieu: Aix en Provence
Date d'inscription: 23-02-2009
Messages: 14
Site web

Re: [Résolu][1.11] Autoload et classe personalisée

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.


http://borisguery.com | Fork me on Github | Follow me on Twitter | Check out my tips on Coderwall | More About me

Hors ligne

 

#11 06-07-2011 19:21:43

Schyzophrenic
Membre
Date d'inscription: 05-07-2011
Messages: 12

Re: [Résolu][1.11] Autoload et classe personalisée

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

Code:

[lang=php]
echo $filename.'</br/>';
        if ($once) {
            include_once $filename;
        } else {
            include $filename;
        }

Qui m'affiche ceci:

Code:

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

Code:

[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 ! big_smile

Dernière modification par Schyzophrenic (06-07-2011 19:23:17)

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