我正在将一些项目代码迁移到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_');
有什么想法吗?
答案 0 :(得分:2)
我不知道为什么会这样,但确实如此。我看不出任何区别。我注释掉那些线并从另一个项目中复制了原件,它起作用了吗?
;autoloadernamespaces[] = "App_"
;autoloadernamespaces[] = "Boilerplate_"
;autoloaderNamespaces[] = "DCH_"
;autoloadernamespaces[] = "Elastica_"
;autoloadernamespaces[] = "EasyBib_"
autoloaderNamespaces[] = "App_"
autoloaderNamespaces[] = "DCH_"
autoloaderNamespaces[] = "Boilerplate_"
autoloaderNamespaces[] = "Elastica_"
autoloaderNamespaces[] = "EasyBib_"