使用Zend_View_Helper_ *和自动加载读取助手

时间:2010-02-02 15:09:30

标签: php zend-framework

我已将自动加载器设置为使用Fallback Autoloader,如下所示:

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

如果我查看php错误,会在每次调用Zend_View_Helper时生成通知,并尝试读取帮助程序,例如:/var/www/arc/views/helpers/。这是一个示例通知:

    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

似乎问题就在这里:

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

使用FallbackAutoloader会导致这种情况发生吗?这似乎是一个潜在的性能问题。此外,它应该正确解析名称空间Zend_View_Helper_?我在这里缺少什么?

更新: 不,Zend/View/Helper/Layout.php就在那里。

也许,我错过了Zend_Loader_Autoloader应该做的事情(我认为在这种情况下文档有点弱)。

例如,如果我将application.ini文件调整为以下内容:

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

并输出include_path,模型,目录显然在include路径中但没有加载类。

如果我在Bootstrap _init函数中添加以下内容

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

加载很好。对于前一种情况,我是否需要设置命名空间?

发表评论: 这是输出的当前值:

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) {
}

2 个答案:

答案 0 :(得分:0)

通知说什么? 我会假设它试图从该文件夹中自动加载帮助程序,但他找不到他期望的类。

答案 1 :(得分:0)

你还有其他自动加载器吗?如果没有,则不需要setFallbackAutoloader(true)。

肯定会有一些时髦的事情发生。是否以某种方式删除了Zend / View / Helper / Layout.php?