Я работаю над FOSUserBundle, над EventListener для RegistrationUser.
В этом пакете, когда я создаю пользователя, я использую метод updateUser () (в Vendor ... Model / UserManagerInterface). Кажется, что этот метод подчиняется EventListener, который запускает как минимум два действия. Регистрация информации, внесенной в базу данных. И отправив электронное письмо пользователю, чтобы отправить ему учетные данные для входа.
Я нашел способ отправки почты. По минусам не нашел того, кто делает запись. Я также не нашел, где установить два события.
Прежде всего (и моей личной информации) я пытаюсь найти эти два пока неизвестных момента. Если бы кто-нибудь мог направить меня?
Затем, в зависимости от того, что мы решим с нашим клиентом, я могу перейти к надбавке (которую я до сих пор не знаю, как это сделать), но я полагаю, что нашел бы немного лучше, как только мои два незнакомца найдут :-)
Спасибо за внимание и помощь :-)
Они определены, но я не нахожу, где они. Моя проблема в том, что, когда электронное письмо с подтверждением регистрации не исчезает (по той или иной причине), регистрация учетной записи не выполняется и в процессе производства отображается страница с ошибкой. Это логическая операция, которая беспокоит нашего клиента. Мы ждем решения проблемы отправки почты, но пока их ИТ-отдел окончательно не решит работать, мы изучаем вопрос о временном решении, которое больше не блокирует регистрацию. За исключением того, что я не нахожу, где определяются события, внезапно я немного застрял.
Не могли бы вы опубликовать отображаемую ошибку? Если проблема связана с sendEmail, у вас, вероятно, неправильная конфигурация или вы неправильно подключаетесь к серверу электронной почты, с другой стороны, если это ошибка регистрации, электронное письмо не будет отправлено, потому что это происходит только тогда, когда запускается событие onRegistrationSuccess. Опубликуйте сообщение об ошибке, чтобы я мог лучше понять проблему.
Мы знаем ошибку и работаем над ее устранением. (Ошибка 421, возвращенная Gmail, ИТ-отдел клиента занят предоставлением нам новой службы smtp, но они работают очень медленно). Мы хотим изменить поведение EventListener, пока проблема не будет решена. Итак, я ищу, где объявлен FOSUserBundle EventListener для выполнения временной обработки. (Это тема моего запроса, если бы кто-нибудь мог сказать мне, как объявлен FOSUserBundle EventListener, а не моя проблема с почтой :-)).




Это функция, которая обрабатывает подтверждение по электронной почте при регистрации.
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));
}
Вы никогда не должны изменять сторонние библиотеки, в этом случае система диспетчера событий создана для более ранней обработки события и, если это необходимо, остановки распространения и предотвращения «повторной обработки» события.
Надеюсь, поможет!!!!
Спасибо за вашу помощь и предложения :-)
@Anna пожалуйста, если это сработало, проголосуйте, чтобы закрыть тему
В чем логика? Вы хотите послушать регистрацию ?? Объясните лучше пожалуйста. FosUser имеет уже определенные события