如何为Symfony2中的所有控制器设置会话变量?

时间:2014-09-05 09:30:57

标签: symfony

如何在控制器中创建和访问Symfony 2会话变量。 我这样用过。

$session = new Session();
$session->start();
$session->set('loginUserId',$user['user_id']);

我想知道如何在我的所有控制器中使用上述会话变量来访问。

3 个答案:

答案 0 :(得分:25)

在控制器中使用Symfony中的Sessions的一种方法是:

设定:

$this->get('session')->set('loginUserId', $user['user_id']);

得到:

$this->get('session')->get('loginUserId');

如果您使用标准框架版

答案 1 :(得分:10)

来自文档:

  

Symfony会话旨在取代几个本机PHP函数。   应用程序应避免使用session_start(),   session_regenerate_id(),session_id(),session_name()和   session_destroy(),而是使用以下部分中的API。

  

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

因此,会话自动启动并可以访问,例如来自控制器:

public function indexAction(Request $request)
{
    $session = $request->getSession();
    ...
}

或:

public function indexAction()
{
    $session = $this->getRequest()->getSession();
    // or
    $session = $this->get('session');
    ...
}

比:

// store an attribute for reuse during a later user request
$session->set('foo', 'bar');

// get the attribute set by another controller in another request
$foobar = $session->get('foobar');

// use a default value if the attribute doesn't exist
$filters = $session->get('filters', array());

答案 2 :(得分:2)

http://symfony.com/doc/current/components/http_foundation/sessions.html

  use Symfony\Component\HttpFoundation\Session\Session;

  $session = new Session();
  $session->start();

  // set and get session attributes
  $session->set('name', 'Drak');
  $session->get('name');

  // set flash messages
  $session->getFlashBag()->add('notice', 'Profile updated');

  // retrieve messages
     foreach ($session->getFlashBag()->get('notice', array()) as $message) {
     echo '<div class="flash-notice">'.$message.'</div>';
  }