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

Posted

技术标签:

【中文标题】使用 Zend_View_Helper_* 读取助手并自动加载【英文标题】:Reading helper with Zend_View_Helper_* and autoloading 【发布时间】:2010-02-02 15:09:29 【问题描述】:

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

$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 文件调整为以下内容:

[生产] 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= "引导" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

并输出include_path,models,目录显然在包含路径中但没有加载类。

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

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

加载正常。对于前一种情况,是否需要设置Namespace?

至第一条评论: 这是输出的当前值:

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) 

【问题讨论】:

【参考方案1】:

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

【讨论】:

对,但这些是他们的文件,它会在正确的路径(即 Zend/View/Helper)中为每个使用的帮助程序查找它们。【参考方案2】:

您还有其他自动装载机吗?如果没有,则不需要 setFallbackAutoloader( true )。

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

【讨论】:

在“第一条评论”处添加信息

以上是关于使用 Zend_View_Helper_* 读取助手并自动加载的主要内容,如果未能解决你的问题,请参考以下文章

ks代码助解

潇洒秘籍:这次助你无缝切换vue3

三个关键点助你做出刷屏级互动游戏

1.16. BIP39协议:使用助记词生成确定性钱包

易助工资总额管控上市说明

如何使用助记词创建 Web3py 帐户