0

我将 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.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(),

问题是......它无法正常工作。

致命错误:未捕获的异常 'LogicException' 带有消息 'Bundle "FOSUserBundle" 直接由两个包 "SonataUserBundle" 和 "ApplicationFOSUserBundle" 扩展。在 /home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.php.cache 第 2364 行(!) LogicException:捆绑“FOSUserBundle”直接由两个捆绑“SonataUserBundle”和“ApplicationFOSUserBundle”扩展。在 /home/piotr.gawlowski/dev_dash_devel/dev-dash/app/bootstrap.php.cache 第 2364 行

4

1 回答 1

9

不可能让两个捆绑包使用捆绑包继承扩展同一个捆绑包。原因很简单......如果两个扩展包中存在相同的文件,symfony 怎么知道使用哪个文件......因此包继承只能是线性的。

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

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

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