2012-04-09 12 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

このように表示されない場合は、exitまたはdieを追加する必要があります。つまり、echo 'foo'; exit; – Inoryy

+0

symfonyは私のものではなくFOSUserBundleのregisterActionメソッドを呼び出すため、動作しません。したがって、echo()もexit()もありません。 –

+0

あなた自身のバンドルの 'routing.yml'(デフォルトでは空白です)を削除してください。私はデフォルトを使用していて、Symfonyは同じファイル名を持つ場合、親の代わりに「子」バンドルから*すべて*を実際に読み込みます。 – Tatsh

答えて

3

ちょうど時間を費やしてこの作業をしようとすると、やっとそれを理解しました。私が欠けていた部分は、MyUserBundle内のUserエンティティでUserクラスを拡張することでした。例えば:

namespace MyNamespace\MyMainBundle\Entity; 

use MyNamespace\MyUserBundle\Entity\User as BaseUser; 

class User extends BaseUser 
{ 
} 

ユーザエンティティは、(わずかに異なる名前空間)FOSUserBundleにおけるものと同じです。

namespace MyNamespace\MyUserBundle\Entity; 

use FOS\UserBundle\Model\User as AbstractUser; 

abstract class User extends AbstractUser 
{ 
} 

私はこれをしなかった場合はジェフリーが述べたように(それが存在していなかったかのように)、MyUserBundleが全く使用されませんでした。現在、オーバーライドされたすべてのビュー、コントローラなどが使用されています。お役に立てれば。

0

私にとってはうまくいかない私はあなたの解決策をしようとします。最後に、キャッシュをクリアするだけです。私のproyectの中にはもちろん、PHPのbin/consoleキャッシュがあります。そして、魅力のように機能します。

キャッシュをクリアしてみてください。

そして、私の悪い英語のために申し訳ありません。