我在我的布局中调用了一个视图助手,它在默认模块中运行良好,但是当我在另一个模块中时出现异常。
我已经通过设置更改了我的 app.ini 以在所有模块中使用默认布局:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
在这里搜索和谷歌为我提供了另一个 app.ini 设置来为所有模块添加视图助手路径:
resources.view.helperPath.Zend_View_Helper = APPLICATION_PATH "/views/helpers"
但是,该附加设置并没有解决问题,而是导致 Zend 异常成为 WSOD。
如果没有第二个 app.ini 设置,我会看到布局并得到以下异常:
Plugin by name 'AutoScript' was not found in the registry; used paths: Admin_View_Helper_: /Applications/XAMPP/xamppfiles/htdocs/dad/application/modules/admin/views/helpers/ Zend_View_Helper_: Zend/View/Helper/:./views/helpers/
使用 helperPath.Zend_View_Helper ini 设置,我得到一个 WSOD,其中包含以下内容:
Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'AutoScript' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/:./views/helpers/'
插件加载器似乎正在 public/views/helpers/ 中查找 AutoScript.php 文件,即使它应该使用 APPLICATION_PATH 值作为前缀。
我的布局调用看起来像这样
<?php $this->AutoScript(); ?>
我的 AutoScript.php 文件的类在 application/views/helpers/ 中定义
class Zend_View_Helper_AutoScript extends Zend_View_Helper_Abstract {
public function AutoScript() {...}
}
我目前的解决方法是将 AutoScript.php 文件从 application/views/helpers 复制到 modules/admin/views/helpers 中,这可以解决问题,但会复制一个文件。我错过了什么?我是否必须通过在我的引导程序中创建 _initView 函数以编程方式添加此视图帮助程序路径?