如何访问控制器中的会话变量
Posted
技术标签:
【中文标题】如何访问控制器中的会话变量【英文标题】:How to access the session variable in the controller 【发布时间】:2013-05-28 04:28:46 【问题描述】:我在一个控制器中创建了一个会话变量,我想在另一个控制器中访问它。在loginsuccess
控制器中,我设置了会话:
$session->set('id',$id);
如何在另一个控制器中访问此变量?
【问题讨论】:
【参考方案1】:您应该使用session
服务:
$id = $this->get('session')->get('id');
或
$this->get('session')->set('id', $id);
【讨论】:
我同意,这是一个更好的方法。 给我Undefined method get
【参考方案2】:
虽然 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
注意:
虽然建议显式启动会话,但会话将 实际上是按需启动的,也就是说,如果有任何会话请求 读/写会话数据。
【讨论】:
好点。但请注意,这是组件文档。实际上,根据框架文档,还有第三种使用会话服务的方法:symfony.com/doc/current/book/… :) 但是,也许值得补充的是,从请求对象返回的会话对象与从服务容器返回的会话对象完全相同 由于问题是关于从控制器访问会话,因此您的回答更有意义。但正如您所说,可能值得一提的是$this->getRequest()->getSession()
在这种情况下也有效!【参考方案3】:
一般来说,如果您的控制器从基础 Symfony 控制器 (Symfony\Bundle\FrameworkBundle\Controller\Controller
) 扩展而来,您可以通过 3 种方式获取会话:
$session = $this->container->get('session');
$session = $this->get('session');
(基本上是1的捷径)
$session = $request->getSession();
【讨论】:
【参考方案4】:还有第三种写评论的方式:
use Symfony\Component\HttpFoundation\Session\SessionInterface;
public function indexAction(SessionInterface $session)
$session->set('test', 'yes !');
这种方式可以让你得到类型提示的变量,这样你就可以在你的IDE中访问Session对象的方法。
【讨论】:
以上是关于如何访问控制器中的会话变量的主要内容,如果未能解决你的问题,请参考以下文章
PHP MVC 最佳实践 - 将 Session 变量从控制器传递给模型类或直接在模型中访问