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 SecurityBundle:注销后如何保持在同一页面上?