无法自动装配服务 FOSUserBundle,Symfony 3.4

Cannot autowire service FOSUserBundle, Symfony 3.4

我正在尝试覆盖我的 FOSUserBundle 的注册控制器。 我已按照 https://symfony.com/doc/3.4/bundles/inheritance.html 上的步骤进行操作,但出现以下错误:

无法自动装配服务 "AppBundle\Controller\RegistrationController":方法 "FOS\UserBundle\Controller\RegistrationController::__construct()" 的参数“$formFactory”引用接口 "FOS\UserBundle\Form\Factory\FactoryInterface" 但不存在此类服务。您或许应该将此接口别名为这些现有服务之一:"fos_user.profile.form.factory"、"fos_user.registration.form.factory"、"fos_user.change_password.form.factory"、"fos_user.resetting.form.factory".

我的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;
        }
     }

我的AppBundle.php

<?php

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

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

我确定这适用于 Symfony 3.2.3 这仅适用于 symfony 版本 <= 3。因为 bundle inheritance 已被取消,将在 4 中被禁用。 将 composer.json 中的 FOSUserBundle 版本更改为

"friendsofsymfony/user-bundle": "2.0.2"

和运行命令更新它

composer update

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

由于捆绑继承将消失,只需调整寄存器路由以指向您的控制器:

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

fos_user_registration_register:
    path: /register
    controller: AppBundle\Controller\RegistrationController::registerAction

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

# app/services.yaml, keep all the standard defaults above
AppBundle\Controller\RegistrationController:
    arguments:
        $formFactory: '@fos_user.registration.form.factory'

你应该可以开始了。

唯一剩下的问题是您最初为什么要这样做?您基本上需要 copy/paste 来自您的基础 class 的整个 registerAction。大多数时候,您会想要创建一个 FOS event subscriber 并监听 REGISTRATION_INITIALIZE、REGISTRATION_SUCCESS、REGISTRATION_COMPLETED 或 REGISTRATION_FAILURE 事件。