Zend框架自动加载器奇怪的行为

时间:2012-03-11 18:28:35

标签: zend-framework

我正在将一些项目代码迁移到ZF-Boilerplate,并且遇到了自动加载器的一些奇怪行为。

我在application.ini中有这些行

autoloadernamespaces[] = "App_"
autoloadernamespaces[] = "Boilerplate_"
;autoloaderNamespaces[] = "DCH_"
autoloadernamespaces[] = "Elastica_"
autoloadernamespaces[] = "EasyBib_"

请注意; autoloaderNamespaces [] =“DCH_”已注释掉。

稍后,在我的bootstrap中,我将以下行作为测试:

$test=new Elastica_Facet_Range('testing');

工作正常,但如果我取消注释以前注释的行,我会收到此错误:

Fatal error: Class 'Elastica_Facet_Range' not found in /vagrant/www/myswap/application/Bootstrap.php on line 43

这让我很生气,因为我无法让我的命名空间工作。

当我逐步浏览Zend_Loader_Autoloader时,受保护的变量名称空间包含:Zend ,ZendX_,App_,Boilerplate_,Elastica_和EasyBib _

使用行取消注释名称空间包含(如果我将DCH 行移动到列表末尾):Zend_,ZendX和DCH _

如果我将DCH_行移动到列表的开头名称空间包含:Zend ,ZendX_,App_,Boilerplate_,Elastica_和EasyBib _

我已将以下内容添加到引导程序中以使其正常工作,但这是一个黑客攻击,我对它不满意:

$autoloader = \Zend_Loader_Autoloader::getInstance();

        $autoloader->registerNamespace('DCH_');

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我不知道为什么会这样,但确实如此。我看不出任何区别。我注释掉那些线并从另一个项目中复制了原件,它起作用了吗?

;autoloadernamespaces[] = "App_"
;autoloadernamespaces[] = "Boilerplate_"
;autoloaderNamespaces[] = "DCH_"
;autoloadernamespaces[] = "Elastica_"
;autoloadernamespaces[] = "EasyBib_"

    autoloaderNamespaces[] = "App_"
    autoloaderNamespaces[] = "DCH_"
    autoloaderNamespaces[] = "Boilerplate_"
    autoloaderNamespaces[] = "Elastica_"
    autoloaderNamespaces[] = "EasyBib_"