16

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

$session->set('id',$id);

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

4

4 回答 4

29

session您应该使用以下服务:

$id = $this->get('session')->get('id');

或者

$this->get('session')->set('id', $id);
于 2013-06-01T12:43:24.267 回答
16

更笼统地说,如果您的控制器从基础 Symfony 控制器 ( Symfony\Bundle\FrameworkBundle\Controller\Controller) 扩展而来,您可以通过 3 种方式获取会话:

  1. $session = $this->container->get('session');
  2. $session = $this->get('session');(这基本上是1的快捷方式)
  3. $session = $request->getSession();
于 2016-10-07T06:07:02.430 回答
4

虽然 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

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

笔记:

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

于 2013-06-01T22:00:07.050 回答
1

还有第三种写评论的方法:

use Symfony\Component\HttpFoundation\Session\SessionInterface;

public function indexAction(SessionInterface $session)
{
     $session->set('test', 'yes !');
}

通过这种方式,您可以获取类型提示的变量,这样您就可以在 IDE 中访问 Session 对象的方法。

于 2019-08-07T10:24:09.730 回答