无法自动装配服务 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 事件。
我正在尝试覆盖我的 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 事件。