Symfony Symfoyn 3.4:FOS用户包:覆盖控制器
我正在使用Symfoyn 3.4 lts,我试图覆盖FOS用户捆绑登录 PS:从Symfony 3.4开始,bundle继承被弃用, 因此,要覆盖一个动作,只需创建一个具有相同路径的动作 因此,首先我创建了一个名为src/MyVendor/MyVendorFOSUserBundle的包 其次,我从vendor/复制了SecurityController.php/在我的bundle Controller/中,并将路由装饰器放在loginAction上方,但在提交登录表单=>无效CSRF令牌时遇到问题: 通过调试发现,$tokenManager未注入控制器,因此它取空值: 在这段代码中,我刚刚添加了@Route decorator,并将BaseController扩展到复制的控件Symfony Symfoyn 3.4:FOS用户包:覆盖控制器,symfony,overriding,fosuserbundle,symfony-3.4,Symfony,Overriding,Fosuserbundle,Symfony 3.4,我正在使用Symfoyn 3.4 lts,我试图覆盖FOS用户捆绑登录 PS:从Symfony 3.4开始,bundle继承被弃用, 因此,要覆盖一个动作,只需创建一个具有相同路径的动作 因此,首先我创建了一个名为src/MyVendor/MyVendorFOSUserBundle的包 其次,我从vendor/复制了SecurityController.php/在我的bundle Controller/中,并将路由装饰器放在loginAction上方,但在提交登录表单=>无效CSRF令牌时遇到问
#src/MyVendor/MyVendorFOSUserBundle/Controller/SecurityController.php:
class SecurityController extends BaseController
{
private $tokenManager;
public function __construct(CsrfTokenManagerInterface $tokenManager = null)
{
$this->tokenManager = $tokenManager;
}
/**
* @param Request $request
* @return Response
* @Route("/login")
*/
public function loginAction(Request $request)
{ ... }
因此,为了纠正这个问题,我尝试在@Route Decorator中添加属性名称,并保持与FOS用户捆绑包中相同的路由名称,但在本例中,FOS用户捆绑包的控制器被执行,而我的新控制器被忽略(我通过将die('test')放在控制器contructor上进行测试)
问题是正确覆盖此操作的解决方案是什么?我也有同样的问题,我单独加载了路由,并将登录操作指向我的cutom控制器,该控制器使用一些自定义逻辑扩展了FOSUsercontroller
fos_user_security_login:
path: /login
methods: [GET, POST]
defaults: { _controller: 'YourUserBundle\Controller\SecurityController:loginAction' }
fos_user_security_check:
path: /login_check
methods: [POST]
defaults: { _controller: fos_user.security.controller:checkAction }
fos_user_security_logout:
path: /logout
methods: [GET, POST]
defaults: { _controller: fos_user.security.controller:logoutAction }
然后我将控制器注册为服务器,以解决缺少的令牌服务