2012-03-11 46 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