Symfony Symfoyn 3.4:FOS用户包:覆盖控制器

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令牌时遇到问

我正在使用Symfoyn 3.4 lts,我试图覆盖FOS用户捆绑登录

PS:从Symfony 3.4开始,bundle继承被弃用, 因此,要覆盖一个动作,只需创建一个具有相同路径的动作

因此,首先我创建了一个名为src/MyVendor/MyVendorFOSUserBundle的包

其次,我从vendor/复制了SecurityController.php/在我的bundle Controller/中,并将路由装饰器放在loginAction上方,但在提交登录表单=>无效CSRF令牌时遇到问题: 通过调试发现,$tokenManager未注入控制器,因此它取空值: 在这段代码中,我刚刚添加了@Route decorator,并将BaseController扩展到复制的控件

#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 }
然后我将控制器注册为服务器,以解决缺少的令牌服务