2013-12-09 2 views
3

У меня есть работающее приложение Symfony2, которое правильно регистрирует пользователей и выдает их, а при выходе из системы он перенаправляет пользователя на главную страницу.Symfony2 Dynamic Logout Target?

Я бы хотел оставить их на своей текущей странице при выходе из системы, только без их входных привилегий.

Мой вопрос:

Могу ли я динамически установить страницу пользователь перенаправляется, когда они выйти?

+0

при выходе из него правильно перенаправляет на главную страницу, так как в действии выхода из системы он установлен для перенаправления на дому действия. поэтому действие выхода из системы перенаправляет пользователя на текущее действие. – sas

ответ

2

мне нужен Выход успеха Handler, и это, как я реализовал его:

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); 
    } 
} 
6

Что вам нужно, это обработчик успеха выхода из системы.

Определить обработчик выхода из системы в 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 ] ]