2013-12-09 46 views
3

我有一個正常工作的Symfony2應用程序,可正確記錄用戶進出,並且在正確註銷時可將用戶重定向到主頁。Symfony2動態註銷目標?

我想在註銷時將它們保留在當前頁面上,只有沒有它們的登錄權限。

我的問題是:

我可以動態設置的用戶被定向到當他們註銷頁面?

+0

。所以註銷操作將用戶重定向到當前操作。 – sas

回答

2

我需要註銷成功處理程序,這是我是如何實現它:

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目錄/阿克米/ DefaultBundle /處理器/ 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')); 
    } 
} 

順便說一句...請刪除不必要的進口,希望這有助於! :d

這裏是services.yml

services: 
    acme.security.logout_success_handler: 
     class: Acme\Bundle\SecurityBundle\Handler\LogoutSuccessHandler 
     calls: 
      - [ setContainer, [ @service_container ] ]