3

FOSUserBundleを使用していて、彼のregisterActionコントローラーをオーバーライドしたいと思います。FOSUserBundleのコントローラーのオーバーライドに関連するドキュメントを読みましたが、機能しません。コントローラに小さなメッセージをエコーすることにより、それはテンプレートに印刷されません。

これが私が選んだ方法です:

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;
    }
}

解決策はありますか?

4

2 に答える 2

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はまったく使用されませんでした(存在しないかのように)。これで、オーバーライドされたビュー、コントローラーなどがすべて使用されます。お役に立てれば。

于 2012-05-23T12:02:40.253 に答える
1

それは私にはうまくいきません。私はあなたの解決策をしようとします。最後に、php bin / console cache:clearのキャッシュをクリアします。もちろんプロジェクト内をクリアします。そして、魅力のような機能。

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

そして、私の悪い英語でごめんなさい。

于 2016-10-12T16:01:19.720 に答える