我在控制器的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交谈和使用
答案 0 :(得分:2)
您不必这样做,但建议您这样做。 From the docs:
虽然建议明确启动会话,但会话实际上会按需启动,也就是说,如果有任何会话请求来读取/写入会话数据。
您需要使用Session
,$session = $request->getSession()
或$session = $this->get('session')
获取$session = new Symfony\Component\HttpFoundation\Session\Session();
容器。这与开始会话不同,三种方式之间没有区别。
这适用于任何Symfony 2.x版本。