Как создать пользовательский слушатель события выхода из системы (onLogout) с помощью FOSUserBundle в Symfony 3

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

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

Реализация

Рекомендуемый способ, это создать папку с именем Listeners в ваш комплект, и создайте класс с именем LogoutListener внутри со следующим кодом:

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

userManager = $userManager;
}
public function logout(Request $Request, Response $Response, TokenInterface $Token) {
// ..
// Here goes the logic that you want to execute when the user logouts
// ..
// The following example will create the logout.txt file in the /web directory of your project
$myfile = fopen("logout.txt", "w");
fwrite($myfile, 'logout succesfully executed !');
fclose($myfile);
}
}

Теперь, когда у вас есть класс, который будет обрабатывать событие выхода из системы, нам нужно создать службу, которая будет его использовать. Приступить к изменению services.yml файл вашего проекта и зарегистрируйте новый сервис, как показано ниже:

services:
# Register the LogoutListener service
# The namespace where the class is located
# and the class name at the end.
# we'll inject the user_manager in case that you need it
mybundle_logoutlistener:
class: myBundle\Listeners\LogoutListener
arguments:
userManager: "@fos_user.user_manager"

Наконец, зарегистрированный сервис, который в данном случае имеет название mybundle_logoutlistener (что вы, очевидно, можете настроить), должен быть введен в обработчики события выхода из системы в вашем security.yml файл:

security:
## ...
firewalls:
## ...
main:
## ...
logout:
handlers: [mybundle_logoutlistener]

И ты готов к работе! Не забудьте очистить кэш (вручную или с помощью команды) и перейти к входу в свой проект и затем выйти. Как показано в этом примере, файл («logout.txt») будет создаваться в веб-каталоге вашего проекта только для целей тестирования, не стесняйтесь менять его на любые действия, которые вам нужно сделать.

Ссылка на основную публикацию
Adblock
detector