我在一个控制器中创建了一个会话变量,我想在另一个控制器中访问它。在loginsuccess
控制器中,我设置了会话:
$session->set('id',$id);
如何在另一个控制器中访问此变量?
session
您应该使用以下服务:
$id = $this->get('session')->get('id');
或者
$this->get('session')->set('id', $id);
更笼统地说,如果您的控制器从基础 Symfony 控制器 ( Symfony\Bundle\FrameworkBundle\Controller\Controller
) 扩展而来,您可以通过 3 种方式获取会话:
$session = $this->container->get('session');
$session = $this->get('session');
(这基本上是1的快捷方式)$session = $request->getSession();
虽然 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
笔记:
虽然建议显式启动会话,但会话实际上会按需启动,也就是说,如果有任何会话请求来读取/写入会话数据。
还有第三种写评论的方法:
use Symfony\Component\HttpFoundation\Session\SessionInterface;
public function indexAction(SessionInterface $session)
{
$session->set('test', 'yes !');
}
通过这种方式,您可以获取类型提示的变量,这样您就可以在 IDE 中访问 Session 对象的方法。