0

FOSUserBundle で SonataUserBundle を使用しています。AppKernel.php では、次のようになります。

 new FOS\UserBundle\FOSUserBundle(),
 new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
 new Application\Sonata\UserBundle\ApplicationSonataUserBundle(),

SonataUserBundle の一部のコントローラーは既にオーバーライドされています。

ここで、FOSUserBundle ChangePasswordController をオーバーライドします。だから私は作った: src/Application/FOS/UserBundle/Controller/ChangePasswordController.php src/Application/FOS/UserBundle/ApplicationFOSUserBundle.php

<?php
namespace Application\FOS\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class ApplicationFOSUserBundle extends Bundle
{
    /**
    * {@inheritdoc}
    */
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

変更された AppKernel.php と同様に

 new FOS\UserBundle\FOSUserBundle(),
 new Application\FOS\UserBundle\FOSUserBundle(),
 new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
 new Application\Sonata\UserBundle\ApplicationSonataUserBundle(),

問題は... 正しく動作していないことです。

致命的なエラー: メッセージ「バンドル "FOSUserBundle" は、2 つのバンドル "SonataUserBundle" および "ApplicationFOSUserBundle" によって直接拡張されています。」/home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.php.cache の 2364 行目 ( ! ) LogicException: バンドル "FOSUserBundle" は、2 つのバンドル "SonataUserBundle" と "ApplicationFOSUserBundle" によって直接拡張されています。/home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.php.cache の 2364 行目

4

1 に答える 1

9

2 つのバンドルがバンドルの継承を使用して同じバン​​ドルを拡張することはできません。理由は簡単です...両方の拡張バンドルに同じファイルがあった場合、symfony はどのファイルを使用するかをどのように知るのでしょうか...したがって、バンドルの継承は線形にしかできません。

これはあなたの場合FOSUserBundle-> SonataUserBundle->を意味しますYourBundle

SonataUserBundleSonataUserBundle はすでに FOSUserBundle を拡張しているため、バンドルを拡張する必要があります。

public function getParent()
{
    return 'SonataUserBundle';
}
于 2013-09-02T13:39:03.540 に答える