程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在 Symfony 5.3 上的控制器中获取 Session 对象?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在 Symfony 5.3 上的控制器中获取 Session 对象??

开发过程中遇到如何在 Symfony 5.3 上的控制器中获取 Session 对象?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在 Symfony 5.3 上的控制器中获取 Session 对象?的解决方法建议,希望对你解决如何在 Symfony 5.3 上的控制器中获取 Session 对象?有所启发或帮助;

对于在 Symfony 5.3 中的控制器中检索当前会话对象的“正确”方式,我有点困惑。 current documentation 表示将参数类型提示为 %merge。但是,此 Symfony blog post 表示 SessionInterface 已被弃用,以支持使用 SessionInterface

在服务中,很明显我应该注入 requestStack 并调用 requestStack。但是,在大多数控制器方法中,我已经注入了 $requestStack->getSession() 对象,该对象也有一个似乎有效的 request 方法。

是否可以从 getSession() 对象获取会话,或者我应该在我的控制器方法中注入 requestrequestStack(这感觉就像几乎重复)


快速代码示例:

request

解决方法

文档尚未更新。*

在 Symfony 5.3+ 中,在控制器上下文之外,您应该从 requestStack 获取会话,正如您正在做的那样,它在博客上有描述。它说明了为什么从 request 对象获取会话数据感觉错误的原因,以及为什么 SessionInterface 被弃用而支持 requestStack

  • Session 是一个数据对象(例如,类似于 request 对象),因此不应在容器中为其定义服务;
  • 会话不是 http 规范(http/1.1、http/2 或 http/3)的一部分,因为 http 是无状态的。这就是为什么将会话作为 httpFoundation 组件的一部分来处理感觉很奇怪的原因。

如果您已经获得 request 对象(例如您在控制器上下文中),您也可以直接从那里获得它,因为 request::getSession() 没有已弃用。这很好,这只是在框架内工作的便利性的一部分。

但如果不是,请直接获取 requestStack 而不是 SessionInterface

public function myRoute(requestStack $requestStack): Response
{
    $requestStack->getSession();
}

(如果你这样做,你也可以从那里获取 request 对象,用类似服务的对象交换数据对象的注入来获取该数据)。

* 请记住,文档本身是开源的,他们欢迎拉取请求以保持更新!

大佬总结

以上是大佬教程为你收集整理的如何在 Symfony 5.3 上的控制器中获取 Session 对象?全部内容,希望文章能够帮你解决如何在 Symfony 5.3 上的控制器中获取 Session 对象?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。