我正在将一些项目代码迁移到 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 并注释掉该行时, protected 变量命名空间包含:Zend、ZendX_、App_、Boilerplate_、Elastica_ 和 EasyBib_
未注释的行命名空间包含(如果我将 DCH 行移至列表末尾):Zend_、ZendX 和 DCH_
如果我将 DCH_ 行移动到列表的开头命名空间包含:Zend、ZendX_、App_、Boilerplate_、Elastica_ 和 EasyBib_
我已将以下内容添加到 Bootstrap 中以使其正常工作,但这是一个黑客行为,我对此不满意:
$autoloader = \Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('DCH_');
有什么想法吗?
最佳答案
我不知道为什么会这样,但确实如此。我看不出有任何区别。我注释掉了这些行并从其他项目复制了原件,它起作用了??
;autoloadernamespaces[] = "App_"
;autoloadernamespaces[] = "Boilerplate_"
;autoloaderNamespaces[] = "DCH_"
;autoloadernamespaces[] = "Elastica_"
;autoloadernamespaces[] = "EasyBib_"
autoloaderNamespaces[] = "App_"
autoloaderNamespaces[] = "DCH_"
autoloaderNamespaces[] = "Boilerplate_"
autoloaderNamespaces[] = "Elastica_"
autoloaderNamespaces[] = "EasyBib_"
关于zend-framework - Zend 框架自动加载器奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657659/