FOSUserBundle, пользователь регистрации EventListener

Я работаю над FOSUserBundle, над EventListener для RegistrationUser.

В этом пакете, когда я создаю пользователя, я использую метод updateUser () (в Vendor ... Model / UserManagerInterface). Кажется, что этот метод подчиняется EventListener, который запускает как минимум два действия. Регистрация информации, внесенной в базу данных. И отправив электронное письмо пользователю, чтобы отправить ему учетные данные для входа.

Я нашел способ отправки почты. По минусам не нашел того, кто делает запись. Я также не нашел, где установить два события.

Прежде всего (и моей личной информации) я пытаюсь найти эти два пока неизвестных момента. Если бы кто-нибудь мог направить меня?

Затем, в зависимости от того, что мы решим с нашим клиентом, я могу перейти к надбавке (которую я до сих пор не знаю, как это сделать), но я полагаю, что нашел бы немного лучше, как только мои два незнакомца найдут :-)

Спасибо за внимание и помощь :-)

В чем логика? Вы хотите послушать регистрацию ?? Объясните лучше пожалуйста. FosUser имеет уже определенные события

Juan I. Morales Pestana 15.05.2018 16:12

Они определены, но я не нахожу, где они. Моя проблема в том, что, когда электронное письмо с подтверждением регистрации не исчезает (по той или иной причине), регистрация учетной записи не выполняется и в процессе производства отображается страница с ошибкой. Это логическая операция, которая беспокоит нашего клиента. Мы ждем решения проблемы отправки почты, но пока их ИТ-отдел окончательно не решит работать, мы изучаем вопрос о временном решении, которое больше не блокирует регистрацию. За исключением того, что я не нахожу, где определяются события, внезапно я немного застрял.

Sili 16.05.2018 12:22

Не могли бы вы опубликовать отображаемую ошибку? Если проблема связана с sendEmail, у вас, вероятно, неправильная конфигурация или вы неправильно подключаетесь к серверу электронной почты, с другой стороны, если это ошибка регистрации, электронное письмо не будет отправлено, потому что это происходит только тогда, когда запускается событие onRegistrationSuccess. Опубликуйте сообщение об ошибке, чтобы я мог лучше понять проблему.

Juan I. Morales Pestana 16.05.2018 14:36

Мы знаем ошибку и работаем над ее устранением. (Ошибка 421, возвращенная Gmail, ИТ-отдел клиента занят предоставлением нам новой службы smtp, но они работают очень медленно). Мы хотим изменить поведение EventListener, пока проблема не будет решена. Итак, я ищу, где объявлен FOSUserBundle EventListener для выполнения временной обработки. (Это тема моего запроса, если бы кто-нибудь мог сказать мне, как объявлен FOSUserBundle EventListener, а не моя проблема с почтой :-)).

Sili 16.05.2018 17:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
4
1 271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это функция, которая обрабатывает подтверждение по электронной почте при регистрации.

FOS\UserBundle\EventListener\EmailConfirmationListener

public function onRegistrationSuccess(FormEvent $event)
    {
        /** @var $user \FOS\UserBundle\Model\UserInterface */
        $user = $event->getForm()->getData();

        $user->setEnabled(false);
        if (null === $user->getConfirmationToken()) {
            $user->setConfirmationToken($this->tokenGenerator->generateToken());
        }

        $this->mailer->sendConfirmationEmailMessage($user);

        $this->session->set('fos_user_send_confirmation_email/email', $user->getEmail());

        $url = $this->router->generate('fos_user_registration_check_email');
        $event->setResponse(new RedirectResponse($url));
    }

Но я говорю вам, что то, что вы пытаетесь делать, - плохая практика. Рекомендуемый способ следующий.

Step 1: Select one of the following events to listen(depending on when you want to catch the process)

/**
     * The REGISTRATION_SUCCESS event occurs when the registration form is submitted successfully.
     *
     * This event allows you to set the response instead of using the default one.
     *
     * @Event("FOS\UserBundle\Event\FormEvent")
     */
    const REGISTRATION_SUCCESS = 'fos_user.registration.success';

/**
     * The REGISTRATION_COMPLETED event occurs after saving the user in the registration process.
     *
     * This event allows you to access the response which will be sent.
     *
     * @Event("FOS\UserBundle\Event\FilterUserResponseEvent")
     */
    const REGISTRATION_COMPLETED = 'fos_user.registration.completed';

Step 2 Implement the Event Subscriber with a priority

    public static function getSubscribedEvents()
    {
        return array(
            FOSUserEvents::REGISTRATION_SUCCESS => [
                'onRegistrationSuccess', 100 //The priority is higher than the FOSuser so it will be called first
            ],
        );
    }

Step 3 Implement your function

public function onRegistrationSuccess(FormEvent $event)
    {
       //do your logic here

        $event->stopPropagation();//the Fos User method shall never be called!!
        $event->setResponse(new RedirectResponse($url));
    }

Вы никогда не должны изменять сторонние библиотеки, в этом случае система диспетчера событий создана для более ранней обработки события и, если это необходимо, остановки распространения и предотвращения «повторной обработки» события.

Надеюсь, поможет!!!!

Спасибо за вашу помощь и предложения :-)

Sili 23.05.2018 17:05

@Anna пожалуйста, если это сработало, проголосуйте, чтобы закрыть тему

Juan I. Morales Pestana 23.05.2018 17:40

Другие вопросы по теме