0

我想把 Zend_View 放到 Zend_Registry 中,但我在这个简单的任务中遇到了麻烦。Zend_View 在 application.ini 中被初始化为资源:

resources.view.encoding = "UTF-8"
resources.view.contentType = "text/html; charset=UTF-8"
resources.view.doctype = "HTML4_STRICT"
resources.view.helperPath.ZendX_JQuery_View_Helper = "ZendX/JQuery/View/Helper"

它工作正常,然后我想通过在 Bootstrap.php 中添加方法将其放入注册表中。

protected function _initView()
{
    $view = $this->getResource('view');
    Zend_Registry::set('view', $view);

    return $view;
}

刷新后,我在视图初始化中遇到错误:

Catchable fatal error: Argument 1 passed to ZendX_JQuery::enableView() must be an instance of Zend_View_Interface, null given, called in D:\projekty\xxx\library\ZendX\Application\Resource\Jquery.php on line 91 and defined in D:\projekty\xxx\library\ZendX\JQuery.php on line 104

我究竟做错了什么?我之前没有收到那个 jQuery 错误

4

2 回答 2

0

初始化资源有两种不同的方法:在 application.ini 文件中和在引导类中使用 _init 方法。当应用程序被引导时,_init 方法首先运行,然后是 ini 文件资源。所以你的代码的问题是,当$this->getResource('view')运行时,视图资源还不存在,所以这将返回 null。然后,您将该 null 放入注册表中,这可能是稍后导致错误的原因。

目前还不太清楚为什么您需要注册表中的视图对象,所以如果您能解释一下我们可能会提出更好的方法。

于 2011-05-10T16:50:12.697 回答
0

将您的 _init 方法称为其他方法...这里可能存在名称冲突。

protected function _initViewInRegistry() {
    // run view resource
    $this->bootstrap('view');

    // put view resource in registry
    Zend_Registry::set('view', $this->getResource('view'));
}

这在命名/语义上有点难看,它可能更适合完全设置您的注册表实例的注册表资源。

于 2011-05-10T18:45:16.233 回答