2014-06-20 21 views
0

自從一個星期以來,我愛上了Symfony2。我有一個feedbackmessagebundle:src/Erwine/FeedBackMessageBundleSymfony2,在同一命名空間但不同文件中的繼承

我把另一個項目的一些自定義類放在:src/Erwine/FeedBackMessageBundle/FeedBackMessage

所有類具有相同的名稱空間:​​。

我在不同的文件中有幾個實現。比方說:
- FeedBackMessageClassOne
- FeedBackMessageClassTwo
- FeedBackMessageClassThree

第一個住在自己的文件。如果兩個從一個延伸我失敗了。我試過use...

兩個和三個在同一個文件中作爲雙胞胎生活。如果三從兩個繼承,它的工作。
控制器中One的實例沒有問題。

在我看來,不同文件中相同名稱空間中類的繼承不起作用。不,不,不,當然不是,我做錯了什麼。不是嗎?但是什麼? Symfony2自定義類是否自動加載?

我正在使用作曲家的依賴關係。

UPDATE
這是我實現:

<?php 

namespace Erwine\FeedBackMessageBundle\FeedBackMessage; 

class FeedBackMessageHandlerImpl extends FeedBackMessageHandlerImplTwee 
{ 
    public function __construct() 
    { 
     //var_dump('constructed'); 
     //parent::__construct(); 
    } 

    //public function getFeedBackMessageGeneralOverride(){}; 
} 
+1

你能發佈你得到的確切的錯誤消息嗎?如果問題尚未解決,我會更新我的答案。 – Seer

回答

0

前提是你的自動加載設置正確,它應該僅僅是這樣的:

文件夾結構:

src/ 
    Erwine/ 
     FeedBackMessageBundle/ 
      FeedBackMessage/ 
       FeedBackMessageClassOne.php 
       FeedBackMessageClassTwo.php 
       FeedBackMessageClassThree.php 

FeedBackMessageClassOne.php:

<?php 

namespace Erwine\FeedBackMessageBundle\FeedBackMessage; 

class FeedBackMessageClassOne 
{ 
    // Contents of class... 
} 

FeedBackMessageClassTwo.php:

<?php 

namespace Erwine\FeedBackMessageBundle\FeedBackMessage; 

class FeedBackMessageClassTwo extends FeedBackMessageClassOne 
{ 
    // Contents of class... 
} 

你不應該需要一個use語句作爲文件駐留在同一個命名空間,在第二個文件中的延伸。因此通過定義相同在第二個類中的命名空間中,您可以使用第一個類而不使用use語句。

確保您的自動加載設置正確。

重要的是讓每個類都保存在一個單獨的文件中,並且還要將這些文件命名爲與類相同的名稱。

這是因爲如果您使用的是作曲家自動加載器,Symfony默認使用PSR-0。 Go here to read more about PSR-0

+0

我從文件中刪除了'FeedBackMessageThree'。現在和你描述的一樣。我將搜索有關自動加載的知識。我應該指向命名空間嗎? – erwineberhard

+0

好吧,我可以幫你一個忙。如果你更新你的問題,幷包括當前的幫助很大的源代碼。另外,你能告訴我涉及的文件的確切名稱嗎? – Seer

+0

感謝您的回答。這裏是我的實現:'''<?php namespace Erwine \ FeedBackMessageBundle \ FeedBackMessage; 類FeedBackMessageHandlerImpl延伸FeedBackMessageHandlerImplTwee { 公共函數__construct(){// 的var_dump( '構造'); // parent :: __ construct(); } // public function getFeedBackMessageGeneralOverride(){}; }''' – erwineberhard