У меня есть работающее приложение Symfony2, которое правильно регистрирует пользователей и выдает их, а при выходе из системы он перенаправляет пользователя на домашнюю страницу.
Я бы хотел оставить их на своей текущей странице при выходе из системы, только без их входных привилегий.
Мой вопрос:
Могу ли я динамически установить страницу, на которую пользователь обращается, когда они выходят из системы?
Вам нужен обработчик успеха выхода из системы.
Определите обработчик выхода в security.yml:
security: firewalls: admin_area: logout: success_handler: acme.security.logout_success_handler
И обработчик выглядит следующим образом:
namespace Acme\Bundle\SecurityBundle\Handler; use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Bundle\FrameworkBundle\Routing\Router; use Symfony\Component\DependencyInjection\ContainerAware; class LogoutSuccessHandler extends ContainerAware implements LogoutSuccessHandlerInterface { public function onLogoutSuccess(Request $request) { // dynamic route logic return new RedirectResponse($this->container->get('router')->generate('dynamic_route_name')); } }
Btw … Пожалуйста, удалите нежелательный импорт и надеюсь, что это поможет! : D
Вот services.yml
services: acme.security.logout_success_handler: class: Acme\Bundle\SecurityBundle\Handler\LogoutSuccessHandler calls: - [ setContainer, [ @service_container ] ]
Мне нужен был обработчик успешного выхода из системы, и именно так я его реализовал:
security.yml :
logout: success_handler: acme.security.logout_success_handler
config.yml :
services: acme.security.logout_success_handler: class: Acme\DefaultBundle\Handler\LogoutSuccessHandler
Symfony / SRC / Acme / DefaultBundle / Handler / LogoutSuccessHandler.php:
<?php namespace Acme\DefaultBundle\Handler; use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\DependencyInjection\ContainerAware; class LogoutSuccessHandler extends ContainerAware implements LogoutSuccessHandlerInterface { public function onLogoutSuccess(Request $request) { $target_url = $request->query->get('target_url') ? $request->query->get('target_url') : "/"; return new RedirectResponse($target_url); } }