###添加getParent方法
// src/UserBundle/UserBundle.php
namespace UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class UserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle'; #这里即是你需要重写某Bundle的名称
}
}
###重写Controller
// src/UserBundle/Controller/RegistrationController.php
namespace UserBundle\Controller;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
class RegistrationController extends BaseController//继承需要重写Controller
{
public function registerAction()
{
//调用父类方法;也可以不调用完全使用自己的逻辑
$response = parent::registerAction();
// 可以做一些自己的事情
return $response;
}
}
这种方式只会在你的模板或路由中使用标准的写法FOSUserBundle:Registration:register
来引用该控制器,才会起作用
###重写资源:模板和路由等
创建和父类一样的位置资源文件即可,例如我经常会重写FOS中 layout.html.twig文件;该文件在 FOSUserBundle中的位置是 Resources/views/layout.html.twig
,我们在自己的Bundle中即可也创建Resources/views/layout.html.twig
来重写覆盖,路由文件也一样
重写资源仅仅当你引用该资源的时候使用完整的路径的方法的时候起作用(FOSUserBundle/Resources/config/routing/security.xml
);如果你使用@BundleName
快捷方式来引用资源是不起作用的;
###注意 翻译和验证文件不是通过这种方式来重写覆盖的