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

时间:2013-06-01 12:29:22

标签: session symfony

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

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

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

4 个答案:

答案 0 :(得分:25)

您应该使用session服务:

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:4)

虽然塞浦路斯答案有效,但您会在文档中找到以下用法:

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

注意:

  

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

答案 3 :(得分:0)

有第三种方式写评论:

use Symfony\Component\HttpFoundation\Session\SessionInterface;

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

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