我在一个控制器中创建了一个会话变量,我想在另一个控制器中访问它。在loginsuccess
控制器中,我设置了会话:
$session->set('id',$id);
如何在另一个控制器中访问此变量?
答案 0 :(得分:25)
您应该使用session
服务:
$id = $this->get('session')->get('id');
或
$this->get('session')->set('id', $id);
答案 1 :(得分:10)
更一般地说,如果您的控制器从基本Symfony控制器(Symfony\Bundle\FrameworkBundle\Controller\Controller
)扩展,您可以通过3种方式获得会话:
$session = $this->container->get('session');
$session = $this->get('session');
(基本上是1的快捷方式)$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对象的方法。