无法自动服务FOSUserBundle,Symfony 3.4

时间:2018-05-23 11:29:56

标签: symfony fosuserbundle autowired 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”。工厂”。

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

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

2 个答案:

答案 0 :(得分: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

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

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

你应该好好去。

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

答案 1 :(得分:1)

我肯定知道,这适用于Symfony 3.2.3 这仅适用于symfony版本&lt; = 3.因为束继承被删除并且将在4中被禁用。 将composer.json中的FOSUserBundle版本更改为

"friendsofsymfony/user-bundle": "2.0.2"

并运行命令来更新它

composer update