Zend_View作为资源,放入Zend_Registry

时间:2011-05-10 14:58:38

标签: php zend-framework bootstrapping zend-view

我想将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;
}

刷新后我在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错误

2 个答案:

答案 0 :(得分:0)

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

为什么你需要注册表中的视图对象并不是很清楚,所以也许你可以解释一下我们可以建议一个更好的方法。

答案 1 :(得分:0)

将_init方法称为其他内容......此处可能存在名称冲突。

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

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

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