【问题标题】:Symfony: how to display a success message after logoutSymfony:注销后如何显示成功消息
【发布时间】:2017-04-25 01:45:13
【问题描述】:

在 Symfony 中,用户成功登出后,如何显示“您已成功登出”之类的成功信息?

【问题讨论】:

  • 那是你自己的快速回答:)
  • 我刚刚花了一点时间想出了最简单的方法来完成这个,然后我认为它值得分享:D
  • 谢谢老兄,你也可以将它添加到堆栈溢出文档中:]

标签: php symfony logout


【解决方案1】:

1) 创建一个新的服务来处理注销成功事件。

services.yml添加服务:

logout_success_handler:
    class: Path\To\YourBundle\Services\LogoutSuccessHandler
    arguments: ['@security.http_utils']

并添加类,将 /path/to/your/login 替换为您的登录页面的 url(在控制器的最后一行):

<?php

namespace Path\To\YourBundle\Services;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\HttpUtils;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;

class LogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
    protected $httpUtils;
    protected $targetUrl;

    /**
     * @param HttpUtils $httpUtils
     */
    public function __construct(HttpUtils $httpUtils)
    {
        $this->httpUtils = $httpUtils;

        $this->targetUrl = '/path/to/your/login?logout=success';
    }

    /**
     * {@inheritdoc}
     */
    public function onLogoutSuccess(Request $request)
    {
        $response = $this->httpUtils->createRedirectResponse($request, $this->targetUrl);

        return $response;
    }
}

2) 配置您的security.yml 以使用刚刚创建的自定义LogoutSuccessHandler

firewalls:
    # ...
    your_firewall:
        # ...
        logout:
            # ...
            success_handler: logout_success_handler

3) 在登录页面的树枝模板中添加:

{% if app.request.get('logout') == "success" %}
    <p>You have successfully logged out!</p>
{% endif %}

【讨论】:

    【解决方案2】:

    恕我直言,有一个绝对更简单的方法。在security.yaml 中,通过target 键定义注销后重定向到的路由:

    security:
      firewalls:
        main:
         [...]
         logout:
           path: /logout
           target: /logout_message
    

    然后在控制器中(SecurityController.php 很好),定义这个动作,只添加 flash 消息,然后重定向到你想要的位置(在这个例子中是 home):

    /**
     * @Route("/logout_message", name="logout_message")
     */
    public function logoutMessage()
    {
        $this->addFlash('success', "You've been disconnected. Bye bye !");
        return $this->redirectToRoute('home');
    }
    

    【讨论】:

    • 如果您想显示真正的 flash 消息,这是 IMO 的最佳解决方案 :)
    猜你喜欢
    • 2019-09-21
    • 2020-03-02
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2016-03-10
    • 2011-08-07
    相关资源
    最近更新 更多