如何访问控制器中的会话变量

bha*_*ari 14 session symfony

我在一个控制器中创建了一个会话变量,我想在另一个控制器中访问它.在loginsuccess控制器中我设置会话:

$session->set('id',$id);
Run Code Online (Sandbox Code Playgroud)

如何在另一个控制器中访问此变量?

Cyp*_*ian 27

session你应该使用的服务:

$id = $this->get('session')->get('id');
Run Code Online (Sandbox Code Playgroud)

要么

$this->get('session')->set('id', $id);
Run Code Online (Sandbox Code Playgroud)


Adr*_* C. 12

更一般地说,如果您的控制器从基本Symfony控制器(Symfony\Bundle\FrameworkBundle\Controller\Controller)扩展,您可以通过3种方式获得会话:

  1. $session = $this->container->get('session');
  2. $session = $this->get('session'); (这基本上是1的捷径)
  3. $session = $request->getSession();


che*_*fly 5

虽然 Cyprian 答案是有效的,但您会在文档中找到以下用法:

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->start();

// set and get session attributes
$session->set('id',$id);
$session->get('id'); //this is the line you are looking for
Run Code Online (Sandbox Code Playgroud)

http://symfony.com/doc/master/components/http_foundation/sessions.html

笔记:

虽然建议显式启动会话,但会话实际上是按需启动的,也就是说,如果发出任何会话请求来读取/写入会话数据。

  • 但是,也许值得补充的是,从 Request 对象返回的 session 对象与从服务容器返回的 session 对象完全相同 (4认同)