首页 > 解决方案 > 访问 flashbag 表单 AbstractFormLoginAuthenticator

问题描述

Symfony 版本:5.1.8

使用表单验证器AbstractFormLoginAuthenticator时,该方法onAuthenticationSuccess输出重定向。在此重定向之后,我想为成功登录的用户显示一条成功消息。

对于这个用例来说,使用来自身份验证器的 flashbag 会很好,这就是我通过注入Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface来实现的服务session.flash_bag。结合:

$this->flashbag->set('login_successfull', 'message_login_form_valid');

有用。

但是在升级到 Symfony 5.1 之后,我发现了这种弃用:

User Deprecated: Since symfony/framework-bundle 5.1: The "session.flash_bag" service is deprecated, use "$session->getFlashBag()" instead.

我正在尝试通过使用来解决此弃用问题$flashbag = $request->getSession()->getBag('flash'),但我无法使其工作,因为没有$flashbag设置消息的方法(只有、getNamegetStorageKey)。clearinitialize

我也尝试注入可用的自动连接session服务,但它来自于SessionInterface它不允许您以我上面提到的相同方式检索和设置 flashbag。

也许我没有正确看待事情,你有什么建议来解决这个用例吗?我虽然放弃了为此使用 flashbag 的想法,但我看不到重定向后传递信息的好方法?

标签: symfonyauthentication

解决方案


如果您查看 的$this->addFlash方法,AbstractController您会发现默认情况下用于添加新闪存消息的服务。所以你的代码应该是这样的:

$this->session->getFlashBag()->add($type, $message);

其中$this->session属性是以下实例:Symfony\Component\HttpFoundation\Session\SessionInterface


推荐阅读