2015-01-27 3 views
0

У меня есть этот код в 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

ответ

2

Вы не должны, однако рекомендуется. From the docs:

Хотя рекомендуется явно начать сеанс, сеанс будет на самом деле начать по требованию, то есть, если какой-либо сеанс запроса производится чтение данных сеанса/записи.

Вам нужно получить Session контейнер с помощью $session = $request->getSession(), $session = $this->get('session') или $session = new Symfony\Component\HttpFoundation\Session\Session();. Это не то же самое, что начать сеанс, и между этими тремя способами нет никакой разницы.

Это относится к любой версии Symfony 2.x.

Смежные вопросы