2012-04-09 117 views
3

我使用FOSUserBundle,我想覆蓋他的registerAction控制器。 我讀了與重寫FOSUserBundle的控制器相關的文檔,但它不起作用。通過在控制器中回顯一條消息,它不會在模板中打印。Symfony2覆蓋控制器

這是我自己選擇的方式:我繼承了我的包從FOSUserBundle

namespace Jheberg\MembersBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class JhebergMembersBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'FOSUserBundle'; 
    } 
} 

而且我在捆的控制器目錄中名爲RegistrationController.php文件中覆蓋registerAction:

namespace Jheberg\MembersBundle\Controller; 

use FOS\UserBundle\Controller\RegistrationController as BaseController; 

class RegistrationController extends BaseController 
{ 
    public function registerAction() 
    { 
     echo 'foo'; 
     $response = parent::registerAction(); 

     // do custom stuff 

     return $response; 
    } 
} 

你有什麼解決方案嗎?

+0

你不會看到它,你需要添加退出或死亡,即echo'foo'; exit; – Inoryy 2012-04-09 11:31:43

+0

它不起作用,因爲Symfony調用FOSUserBundle的registerAction方法,而不是我的。所以,沒有echo()和exit()。 – 2012-04-09 11:35:42

+0

刪除你自己的bundle'routing.yml'(默認爲空)。我使用的是默認值,如果Symfony具有相同的文件名,那麼它真的會從'child'包中讀取* everything *來代替父對象。 – Tatsh 2016-01-13 09:30:24

回答

3

花了幾個小時試圖讓這個工作,並最終弄清楚。我遺漏的部分是使用MyUserBundle中的User實體擴展我的User類。例如:

namespace MyNamespace\MyMainBundle\Entity; 

use MyNamespace\MyUserBundle\Entity\User as BaseUser; 

class User extends BaseUser 
{ 
} 

User實體與FOSUserBundle中的實體相同(只是具有不同的名稱空間)。

namespace MyNamespace\MyUserBundle\Entity; 

use FOS\UserBundle\Model\User as AbstractUser; 

abstract class User extends AbstractUser 
{ 
} 

如果我不這樣做,因爲傑弗裏提到,MyUserBundle完全不被使用(就好像它不存在)。現在我正在使用所有被覆蓋的視圖,控制器等。希望這可以幫助。

0

它不適合我。我嘗試做你的解決方案。最後,我只需清除php bin/console緩存中的緩存runnig:當然,清除我的內部項目。 func就像一個魅力。

所以..試着清除緩存。

對不起,我的英語不好。