2012-03-11 70 views
2

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

我有这些线路中的的application.ini

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

注意到; autoloaderNamespaces [] = “DCH_” 的注释。

后来,在我的引导,我有以下行作为一个测试:

$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_

随着线未注释命名空间中包含(也如果我移动大昌行线到列表的末尾):Zend_,ZendX和DCH_

如果我的DCH_线移动到列表的开始命名空间包含:Zend公司,ZendX_,APP_,Boilerplate_,Elastica_和EasyBib_

我加入以下的引导,使其工作,但它是一个黑客,我不喜欢它:

$autoloader = \Zend_Loader_Autoloader::getInstance(); 

     $autoloader->registerNamespace('DCH_'); 

任何想法?

+0

只是采取一个疯狂的猜测,但你有没有尝试重新排列你的应用程序/ ini中的行,以便DHC_是最后? – ChrisR 2012-03-11 18:33:45

+0

感谢您的评论。我已经更新了我的原始帖子,并提供了更多关于此的详细信 – dimbo 2012-03-11 19:18:18

回答

2

我不知道为什么这个工作,但它确实。我看不出有什么不同。我评论了这些行,并从另一个项目中复制了原件,并且它的工作原理是?

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

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

可能与“autoloadernamespace”中的大写字母“N”有关...也许Zend_Config扼流器呢? – ChrisR 2012-03-11 20:20:09

+2

@ChrisR可能是这种情况。我敢打赌,如果我们查看代码,它可以处理所有骆驼案件或全部小写,但混合他们是要求麻烦。在这个例子中,Zend标准是骆驼案例。 – RockyFord 2012-03-12 06:32:44

+1

现在我想到了,我相信你是对的......神秘解决了! – dimbo 2012-03-12 14:02:39