首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问flashbag表单AbstractFormLoginAuthenticator

访问flashbag表单AbstractFormLoginAuthenticator
EN

Stack Overflow用户
提问于 2020-11-11 02:58:44
回答 2查看 428关注 0票数 0

Symfony版本: 5.1.8

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

在这个用例中使用来自身份验证器的flashbag会很好,这就是我通过注入Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface来利用服务session.flash_bag实现的。与以下内容结合:

代码语言:javascript
复制
$this->flashbag->set('login_successfull', 'message_login_form_valid');

它起作用了。

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

代码语言:javascript
复制
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上没有设置消息的方法(只有getNamegetStorageKeyclearinitialize)。

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

也许我看错了,你有什么建议来解决这个用例吗?我想过放弃使用flashbag的想法,但我看不到在重定向后传递信息的好方法?

EN

回答 2

Stack Overflow用户

发布于 2020-11-11 03:10:35

如果您查看AbstractController$this->addFlash方法,您可以找到默认用于添加新flash消息的服务。所以你的代码应该是这样的:

代码语言:javascript
复制
$this->session->getFlashBag()->add($type, $message);

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

票数 1
EN

Stack Overflow用户

发布于 2020-11-11 06:28:46

我想我会在这里发布这篇文章,只是因为它有点神秘。

SessionInterface::getFlashBag不存在。

getFlashBag确实存在,并返回一个包含add/set方法的FlashBagInterface。

奇怪的是,PHPStorm不会抱怨使用接口中未定义的方法。

代码语言:javascript
复制
class SomeService
{
    private SessionInterface $session;

    public function __construct(SessionInterface $session)
    {
        $this->session = $session;
    }
    public function doSomething()
    {
        // For some reason PHPStorm accepts this
        /** @var FlashBagInterface $flashBag */
        $flashBag = $this->session->getFlashBag();
        $flashBag->add('flash','me');
    }
}

即使在代码帮助菜单中没有列出getFlashBag,上面的代码也可以正常工作,而不会出现警告。我必须知道它在那里,并输入全名。即使PHPStorm知道该方法返回一个FlashBagInterface,我仍然必须添加var映射才能使方法出现在$flashBag上。这一切都非常令人困惑。

我预计会话接口问题将在下一个版本中得到解决。

事实证明,在几年前的这个数据上有几个github问题。已决定不实施“修复”。主要是BC问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64775080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档