我正在将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';
}