我是否需要在需要访问它的任何控制器上启动会话?

时间:2015-01-27 21:48:08

标签: php symfony session

我在控制器的indexAction中有这个代码,该索引是进程的起点(包括通过Ajax调用多个控制器):

$session = $request->getSession();
$currentData = [];
$session->set('currentData', $currentData);

现在假设我需要在另一个控制器中为currentData设置一个新值,我现在正在做:

$session = $request->getSession();

// get currentData from session for not override the values
$currentData = $session->get('currentData');

// sets the new value
$currentData['newValue'] = 1;

// save the var again and override currentData session
$session->set('currentData', $currentData);

关于这一点,正如标题所说,问题很简单:我是否需要在我需要访问会话的任何控制器上启动(每当我需要访问会话时始终调用$session = $request->getSession())?存在任何最好的方法来实现这一点,或者我做错了什么?有什么建议吗?

注意:我忘了提及我与Symfony 2.6.3交谈和使用

1 个答案:

答案 0 :(得分:2)

您不必这样做,但建议您这样做。 From the docs

  

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

您需要使用Session$session = $request->getSession()$session = $this->get('session')获取$session = new Symfony\Component\HttpFoundation\Session\Session();容器。这与开始会话不同,三种方式之间没有区别。

这适用于任何Symfony 2.x版本。