Zend中的循环资源依赖性错误

时间:2013-03-03 02:41:23

标签: php zend-framework

我有一个我想用来设置CSS变量的引导类:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        $this->bootstrap('view');
        ...
        ...
    }
}

但尝试在bootstrap('view')阶段获取视图资源失败。我收到错误:

... Circular resource dependency detected' in C:\ZendFramework\library\Zend\Application\Bootstrap\BootstrapAbstract.php on line 662
...

这很奇怪,因为这是教程(和zend文档)使用的过程。可能有什么不对?

2 个答案:

答案 0 :(得分:3)

将方法更改为类似_initViewStuff()的方法,一切都会好的。

原因是Zend_Application_Bootstrap_BootstrapAbstract中的引导序列如下:

  1. 您对$app->bootstrap() public/index.php的初次通话会浏览所有_initXxx()方法(@see Zend_Application_Bootstrap_BootstrapAbstract::getClassResourceNames())并为每个$this->bootstrap('xxx')调用Xxx它找到了。然后,它将为resources.*中的application.ini键定义的所有插件资源执行类似的操作(尽管您从未如此深入,如下所述)。

  2. bootstrap('view')的调用会在内部存储一个标志,表明他已启动该过程以引导名为view的资源。

  3. 他做了与(1)类似的事情,寻找匹配的_initXxx()方法。他发现并尝试执行$this->_initView()

  4. 他注意到他设置的旗帜,表示他会打出一个无限循环,所以他挽救了循环依赖异常。

  5. 通常,对于每个资源xxx,您使用以下方法中的一个(但不是两个,如您所发现的)引导它:

    1. 定义_initXxx()方法。

    2. 创建一个名为My_Application_Resource_Xxx的插件资源类(使用My_Application_Resource_中的pluginPaths.My_Application_Resource = /path/to/dir/containing/plugin通知该系统application/configs/application.ini是插件资源的命名空间前缀

答案 1 :(得分:2)

您无法在引导类'_initView'中使用此方法名称,因为存在相应的Zend_Application_Resource_View,只需重命名引导方法名称