我正在尝试覆盖我的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';
}
}
如果需要更多信息,请告诉我,以便我可以更新此问题。
答案 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