Моя проблема – выйти из системы. код, который у меня есть:
public function onAuthenticationFailure(Request $request, AuthenticationException $exception){ return new Response($this->translator->trans($exception->getMessage())); } public function logout(Request $request, Response $response, TokenInterface $token) { $empleado = $token->getUser(); $log = new Log(); $log->setFechalog(new \DateTime('now')); $log->setTipo("Out"); $log->setEntidad(""); $log->setEmpleado($empleado); $this->em->persist($log); $this->em->flush(); } public function onLogoutSuccess(Request $request) { return new RedirectResponse($this->router->generate('login')); }
Проблема в том, что я не могу получить доступ к токену пользователя TokenInterface
при запуске функции выхода из системы?
Чтобы получить токен, вы должны ввести контекст безопасности.
1. Создайте прослушиватель List Out, что-то вроде этого:
namespace Yourproject\Yourbundle\Services; ... use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; use Symfony\Component\Security\Core\SecurityContext; class LogoutListener implements LogoutSuccessHandlerInterface { private $security; public function __construct(SecurityContext $security) { $this->security = $security; } public function onLogoutSuccess(Request $request) { $user = $this->security->getToken()->getUser(); //add code to handle $user here //... $response = RedirectResponse($this->router->generate('login')); return $response; } }
2. И затем в service.yml, добавьте эту строку:
.... logout_listener: class: Yourproject\Yourbundle\Services\LogoutListener arguments: [@security.context]
Вот и все, может это поможет.
См. http://symfony.com/doc/current/reference/configuration/security.html.
security.yml
secured_area: logout: path: /logout **success_handler: logout_listener**
Взгляните сюда, можете ли вы перезаписать любой контроллер пакета:
http://symfony.com/doc/current/cookbook/bundles/inheritance.html