Не удается автоматически подключить сервис FOSUserBundle, Symfony 3.4 - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь переопределить контроллер регистрации моего FOSUserBundle.Я выполнил шаги на https://symfony.com/doc/3.4/bundles/inheritance.html Но я получаю следующую ошибку:

Невозможно автоматически подключить службу "AppBundle \ Controller \ RegistrationController": аргумент "$ formFactory" метода "FOS \ UserBundle \ Controller"\ RegistrationController :: __ construct () "ссылается на интерфейс" 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 ".

My 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;
        }
     }

My AppBundle.php

<?php

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

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

Если требуется дополнительная информация, сообщите мне, чтобы я мог обновить этот вопрос.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Я установил и сконфигурировал свежую копию 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'

И вам следует хорошо поехать.

Единственный оставшийся вопрос - почему вы захотите сделать это в первомместо?В основном вам нужно скопировать / вставить весь registerAction из вашего базового класса.В большинстве случаев вам нужно создать подписчика событий FOS и прослушивать события REGISTRATION_INITIALIZE, REGISTRATION_SUCCESS, REGISTRATION_COMPLETED или REGISTRATION_FAILURE.

0 голосов
/ 23 мая 2018

Я точно знаю, что это работает для Symfony 3.2.3 Это только для версии Symfony <= 3. Поскольку наследование комплекта не поддерживается и будет отключено в 4. Измените версию FOSUserBundle вcomposer.json в </p>

"friendsofsymfony/user-bundle": "2.0.2"

и запустить команду для его обновления

composer update
...