Symfony 在 LogoutSuccessHandler 中添加 flash 消息不起作用



我在security.yml中设置了一个注销成功处理程序:

security:
    firewalls:
        secured_area:
             logout:
                 invalidate_session: true
                 success_handler: acme.security.logout_success_handler

我已经在 services.yml 中设置了服务:

acme.security.logout_success_handler:
        class: ACMEFooBundleSecurityHandlerLogoutSuccessHandler

并在 LogoutSuccessHandler .php 中实现代码

class LogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
    public function onLogoutSuccess(Request $request)
    {
        $request->getSession()->getFlashBag()->add('info', 'you have been logged out successfully');
        return new RedirectResponse('/');
    }
}

现在,如果我有任何闪光消息,我会从树枝打印:

{% for flashType, flashMessages in app.session.flashbag.all() %}
   {% for flashMessage in flashMessages %}
   <div class="flash-message-{{ flashType }}">{{ flashMessage|raw }}</div>
   {% endfor %}
{% endfor %}

但不打印任何消息。我认为在调用注销成功处理程序并且闪存消息丢失后会重新生成会话。

您需要

设置invalidate_session: false而不是invalidate_session: true,这样会话就不会失效。请参阅Symfony文档。

最新更新