Symfony:注销后如何显示成功消息

Posted

技术标签:

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

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

【问题讨论】:

那是你自己的快速回答:) 我刚刚花了一点时间想出了最简单的方法来完成这个,然后我认为它值得分享:D 谢谢老兄,你也可以将它添加到堆栈溢出文档中:] 【参考方案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 的最佳解决方案 :)

以上是关于Symfony:注销后如何显示成功消息的主要内容,如果未能解决你的问题,请参考以下文章

[Symfony 5]注销后的确认信息

注销后如何停止 Symfony 重定向

Symfony SecurityBundle:注销后如何保持在同一页面上?

如何强制用户注销 symfony2

Symfony HWIOAuthBundle - 如何禁用自动注销?

Symfony,在表单中预先提示/显示验证约束消息