2010-02-02 4 views
1

j'ai mis le chargeur automatique d'utiliser le chargeur automatique de secours comme ceci:aide de lecture avec Zend_View_Helper_ * et autoloading

$autoloader=Zend_Loader_Autoloader::getInstance(); 
$autoloader->setFallbackAutoloader(true); 

Si je regarde les erreurs php, un avis est généré pour chaque appel à un Zend_View_Helper avec elle essayer pour lire l'aide à par exemple: /var/www/arc/views/helpers/. Voici un exemple d'avis:

fopen(/var/www/arc/views/helpers/Layout.php) [<a href='function.fopen'>function.fopen</a>]: 
failed to open stream: No such file or directory in file /private/var/www/arc/ZendFramework- 
1.9.5/library/Zend/Loader.php at line: 165 

Il semble que la question est ici:

["_prefixToPaths:protected"] => array(1) { 
    ["Zend_View_Helper_"] => array(2) { 
    [0] => string(17) "Zend/View/Helper/" 
    [1] => string(34) "/var/www/arc/views/helpers/" 
    } 

Est-ce que l'aide de la FallbackAutoloader causer cela se produise? Cela semblerait être un problème de performance potentiel. En outre, il devrait résoudre l'espace de noms Zend_View_Helper_ correctement? Qu'est-ce que j'oublie ici?

Mise à jour: non, Zend/View/Helper/Layout.php est là. Peut-être, il me manque le point de ce que le Zend_Loader_Autoloader est censé faire (je pense que les docs sont quelque peu faibles dans ce cas).

Par exemple, si j'ajuster mon application.ini à ce qui suit:

 
[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
includePaths.models= APPLICATION_PATH "/models" 
includePaths.helper= APPLICATION_PATH "/controllers/helpers" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 

et sortie include_path, les modèles, le répertoire est clairement dans le chemin d'inclusion mais pas charger la classe.

Si je puis ajouter ce qui suit dans une fonction _init Bootstrap

$autoloader=Zend_Loader_Autoloader::getInstance(); 
$autoloader->setFallbackAutoloader(true); 

Il charge très bien. Pour la première situation, ai-je besoin de définir un espace de nom?

à premier commentaire: ici sont des valeurs de courant avec sortie:

Zend_Debug::dump($loader->isFallbackAutoloader(),'is fallback autoloader'); 
is fallback autoloader bool(false) 

Zend_Debug::dump($loader->getDefaultAutoloader(),'default autoloader'); 
default autoloader array(2) { 
    [0] => &string(11) "Zend_Loader" 
    [1] => string(9) "loadClass" 
} 

Zend_Debug::dump($loader->getAutoloaders(),'autoloaders'); 
autoloaders array(0) { 
} 

Répondre

0

ce qui est dit l'avis? Je suppose que c'est essayer d'autoloader les aides de ce dossier et il ne trouve pas les classes qu'il attend.

+0

à droite mais ce sont leurs fichiers et il les cherche dans le bon chemin (ie Zend/View/Helper) pour chaque assistant utilisé. – timpone

0

Avez-vous d'autres autochargeurs? Sinon, vous n'avez pas besoin de setFallbackAutoloader (true).

Il y a certainement quelque chose de génial. Est-ce que Zend/View/Helper/Layout.php a été supprimé?

+0

a ajouté des informations sur 'au premier commentaire' – timpone