Skip to content

Override Registration Controller #2837

@wuxian-wifi

Description

@wuxian-wifi

Hello,

I tried to override the registration controller for adding some custom fields, like register date.
But I have some problems:

"Cannot autowire service "fos_user.registration.form.factory": argument "$name" of method "FOS\UserBundle\Form\Factory\FormFactory::__construct()" has no type-hint, you should configure its value explicitly."

app/config/services.yaml:

fos_user.registration.form.factory:
     class: FOS\UserBundle\Form\Factory\FormFactory

app/config/routes.yaml:

fos_user.registration:
    path: /register
    defaults:
        _controller: App\Controller\RegistrationController::registerAction

app/Controller/RegistrationController:

<?php

namespace App\Controller;

use FOS\UserBundle\Controller\RegistrationController as FOSController;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Form\Factory\FactoryInterface;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


class RegistrationController extends FOSController
{
    public function __construct()
    {

    }

    public function registerAction(Request $request)
    {
        $eventDispatcher = $this->get('event_dispatcher');
        $formFactory = $this->get('fos_user.registration.form.factory');
        $userManager = $this->get('fos_user.user_manager');

        $user = $userManager->createUser();
        $user->setEnabled(true);

        $event = new GetResponseUserEvent($user, $request);
        $eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);

        if (null !== $event->getResponse()) {
            return $event->getResponse();
        }

        $form = $formFactory->createForm();
        $form->setData($user);

        $form->handleRequest($request);

        if ($form->isSubmitted()) {
            if ($form->isValid()) {
                $event = new FormEvent($form, $request);
                $eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);

                $register_date = date_create(date('Y-m-d H:i:s'));
                $user_id = "000000000000001";
                $roles = ["ROLE_USER"];

                $user->setDateRegister($register_date);
                $user->setUserId($user_id);
                $user->setRoles($roles);

                $userManager->updateUser($user);

                if (null === $response = $event->getResponse()) {
                    $url = $this->generateUrl('fos_user_registration_confirmed');
                    $response = new RedirectResponse($url);
                }

                $eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

                return $response;
            }

            $event = new FormEvent($form, $request);
            $this->$eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event);

            if (null !== $response = $event->getResponse()) {
                return $response;
            }
        }

        return $this->render('@FOSUser/Registration/register.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

Thank you in advance :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions