gpt4 book ai didi

php - 如何在 Symfony 5.3 的 Controller 中获取 Session 对象?

转载 作者:行者123 更新时间:2023-12-04 07:28:09 24 4
gpt4 key购买 nike

对于在 Symfony 5.3 的 Controller 中检索当前 session 对象的“正确”方式,我有点困惑。 current documentation说要输入一个参数为 SessionInterface .然而,这个 Symfony blog postSessionInterface已被弃用,取而代之的是使用 RequestStack .
在服务中,很明显我应该注入(inject) RequestStack并调用$requestStack->getSession() .但是,在大多数 Controller 方法中,我已经注入(inject)了 Request也有 getSession() 的对象似乎有效的方法。
可以从Request 获取 session 吗?对象,或者我应该注入(inject) RequestStack除了Request在我的 Controller 方法中(这感觉几乎是重复)

一个快速的代码示例:

// in a controller
public function myRoute(Request $request): Response
{
$session = $request->getSession(); // this works
}

// seems silly to also inject RequestStack when I already have Request
public function myRoute(Request $request, RequestStack $requestStack): Response
{
$reqestStack->getSession(); // this works
}

// the way current documentation shows
public function myRoute(Request $request, SessionInterface $session): Response
{
// this causes a deprecation warning from injecting SessionInterface
}

最佳答案

文档尚未更新。*
在 Symfony 5.3+ 中,在 Controller 上下文之外,您应该从 RequestStack 获取 session 。 ,正如你正在做的那样,它在博客上有所描述。它说明了从 Request 获取 session 数据的原因。对象感觉不对,为什么 SessionInterface正在弃用,取而代之的是 RequestStack :

  • Session is a data object (e.g. like the Request object) so there shouldn’t be a service defined for it in the container;
  • Sessions are not part of the HTTP specification (either HTTP/1.1, HTTP/2 or HTTP/3) because HTTP is stateless. That’s why it feels odd to handle sessions as part of the HttpFoundation component.

如果您已经获得 Request对象(例如,您在 Controller 上下文中),您也可以直接从那里获取它,如 Request::getSession()没有被弃用。这很好,它只是在框架内工作的便利的一部分。
但如果不是,请获取 RequestStack而不是 SessionInterface直接地。
public function myRoute(RequestStack $requestStack): Response
{
$requestStack->getSession();
}
(如果你这样做,你也可以从那里获得 Request 对象,将数据对象的注入(inject)与类似服务的对象交换以获取该数据)。
* 请记住,文档本身是开源的,他们欢迎拉取请求以保持更新!

关于php - 如何在 Symfony 5.3 的 Controller 中获取 Session 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68110126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com