无法自动服务FOSUserBundle,Symfony 3.4

Mar*_*man 4 autowired symfony fosuserbundle symfony-3.4

我正在尝试覆盖我的FOSUserBundle的注册控制器.我按照https://symfony.com/doc/3.4/bundles/inheritance.html上的步骤操作但是我收到以下错误:

不能自动装配服务 "的appbundle \控制器\这个RegistrationController":方法的参数 "$ formFactory" "FOS\UserBundle \控制器\这个RegistrationController :: __结构()" 引用接口 "FOS\UserBundle \表格\厂\ FactoryInterface",但没有这样的服务存在.您应该将此接口别名为其中一个现有服务:"fos_user.profile.form.factory","fos_user.registration.form.factory","fos_user.change_password.form.factory","fos_user.resetting.form".厂".

我的RegistrationController.php:

// src/UserBundle/Controller/RegistrationController.php
namespace AppBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;
use Symfony\Component\HttpFoundation\Request;

    class RegistrationController extends BaseController
    {
        public function registerAction(Request $request)
        {
            $response = parent::registerAction($request);

            // ... do custom stuff
            return $response;
        }
     }
Run Code Online (Sandbox Code Playgroud)

我的AppBundle.php

<?php

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息,请告诉我,以便我可以更新此问题.

Cer*_*rad 5

我安装并配置了Symfony 3.4的最新副本以及最新的FOSUserBundle 2.1

由于bundle继承正在消失,只需调整寄存器路由指向你的控制器:

# config/routes.yaml
fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

fos_user_registration_register:
    path: /register
    controller: AppBundle\Controller\RegistrationController::registerAction
Run Code Online (Sandbox Code Playgroud)

然后将表单工厂注入您的控制器:

# app/services.yaml, keep all the standard defaults above
AppBundle\Controller\RegistrationController:
    arguments:
        $formFactory: '@fos_user.registration.form.factory'
Run Code Online (Sandbox Code Playgroud)

你应该好好去.

唯一剩下的问题是为什么你想要首先做到这一点?您基本上需要从基类复制/粘贴整个registerAction.大多数情况下,您希望创建FOS事件订阅者并侦听REGISTRATION_INITIALIZE,REGISTRATION_SUCCESS,REGISTRATION_COMPLETED或REGISTRATION_FAILURE事件.