Как правило, реализация FOSUserBundle имеет тенденцию быть прямой, и это решает почти все ваши требования. Тем не менее, существуют специальные задачи, которые, вероятно, трудно найти в официальной документации или которые нелегко понять. Одна из этих задач состоит в том, чтобы сделать что-то после того, как пользователь успешно запустит сеанс (войдя в свое приложение), и вам нужно знать, когда пользователь делает это, чтобы сделать что-то дополнительное (чтобы добавить параметры в сеанс согласно электронной почте и т. Д.) ,
Вы можете легко заменить «прослушиватель событий», изменяя код в комплекте (каталог поставщика), однако это не рекомендуется, так как это плохая практика, и ваши изменения будут потеряны при любом обновлении, поэтому рекомендуется вместо этого добавлять прослушиватель событий входа.
В этой статье вы узнаете, как прослушивать событие входа в систему, когда пользователь успешно входит в ваше приложение.
Реализация
Рекомендуемый способ — создать папку с именем Listeners в вашем пакете и создать класс с именем LoginListener внутри со следующим кодом:
Примечание: не забудьте изменить пространство имен класса в соответствии с именем вашего комплекта и местоположением класса.
userManager = $userManager;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
// In order to test if it works, create a file with the name login.txt in the /web path of your project
$myfile = fopen("login.txt", "w");
fwrite($myfile, 'onSecurityInteractiveLogin succesfully executed !');
fclose($myfile);
// do something else
// return new Response();
}
}
Теперь, когда у вас есть класс, который будет обрабатывать событие, вам нужно зарегистрировать его как службу в services.yml файл вашего проекта:
services:
login_listener:
# path of the previously created class
class: myBundle\Listeners\LoginListener
arguments:
userManager: "@fos_user.user_manager"
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
Наконец, не забудьте очистить кеш (вручную или с помощью команды) и приступить к входу в свой проект. Как сделано в этом примере, файл («login.txt«) будет создаваться в веб-каталоге вашего проекта только для целей тестирования, вы можете сменить его на ответ или что-то еще, что вам нужно сделать.
Повеселись !