Symfony2动态注销目标?

Pat*_*awa 5 php symfony

我有一个工作的Symfony2应用程序,可以正确地记录和退出用户,并在正确注销时将用户重定向到主页.

我希望在注销时将它们保留在当前页面上,只是没有他们的登录权限.

我的问题是:

可以动态设置用户注销时指向的页面吗?

Cha*_*hka 8

您需要的是注销成功处理程序.

在security.yml中定义注销处理程序:

security:
    firewalls:
        admin_area:
            logout:
                success_handler: acme.security.logout_success_handler
Run Code Online (Sandbox Code Playgroud)

处理程序是这样的:

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'));
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句...请删除不需要的进口,希望这有帮助!:d

这是services.yml

services:
    acme.security.logout_success_handler:
        class: Acme\Bundle\SecurityBundle\Handler\LogoutSuccessHandler
        calls:
            - [ setContainer, [ @service_container ] ]
Run Code Online (Sandbox Code Playgroud)


Pat*_*awa 5

我需要一个注销成功处理程序,这是实现它的方式:

security.yml

logout:
    success_handler: acme.security.logout_success_handler
Run Code Online (Sandbox Code Playgroud)

config.yml

services:
    acme.security.logout_success_handler:
        class: Acme\DefaultBundle\Handler\LogoutSuccessHandler
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)