SonataUserBundle+FOSUserBundle-覆盖控制器


SonataUserBundle + FOSUserBundle - overriding controllers

我正在将SonataUserBundle与FOSUserBundle一起使用。在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.phpsrc/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(),

问题是…它工作不正常。

致命错误:未捕获的异常"LogicException",消息为"Bundle"FOSUserBundle由两个Bundle"SonataUserBundle"answers"ApplicationFOSUserBundle"直接扩展在/home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.hp.cache的2364行(!)LogicException:捆绑包"FOSUserBundle"由两个捆绑包"SonataUserBundle"answers"ApplicationFOSUserBundle"直接扩展。在线2364 上的/home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.hp.cache

不可能让两个bundle通过bundle继承来扩展同一个bundle。原因很简单。。。如果两个扩展包中都有相同的文件,symfony怎么知道该使用哪个文件。。。因此,bundle继承只能是线性的。

这意味着在您的情况下FOSUserBundle->SonataUserBundle->YourBundle

您的捆绑包必须扩展SonataUserBundle,因为SonataUserBundle已经扩展了FOSUserBundle。

public function getParent()
{
    return 'SonataUserBundle';
}