Как получить доступ к переменной сеанса в контроллере

Я создал переменную сеанса в одном контроллере, и я хочу получить доступ к нему на другом контроллере. В контроллере loginsuccess я установил сеанс:

$session->set('id',$id);

Как я могу получить доступ к этой переменной в другом контроллере?

Ответ 1

Существует служба session, которую вы должны использовать:

$id = $this->get('session')->get('id');

или

$this->get('session')->set('id', $id);

Ответ 2

В более общем случае, если ваш контроллер выходит из базового контроллера Symfony (Symfony\Bundle\FrameworkBundle\Controller\Controller), вы можете получить сеанс тремя способами:

  • $session = $this->container->get('session');
  • $session = $this->get('session'); (который в основном является ярлыком для 1)
  • $session = $request->getSession();

Ответ 3

В то время как ответ Киприана действителен, вы найдете в документации следующее использование:

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

Примечание:

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

Ответ 4

Существует третий способ, как запись в комментарии:

use Symfony\Component\HttpFoundation\Session\SessionInterface;

public function indexAction(SessionInterface $session)
{
     $session->set('test', 'yes !');
}

Этот способ позволяет вам получить переменную с подсказкой типа, таким образом вы можете получить доступ к методам объекта Session в вашей IDE.