无法在其他控制器中获取会话数据

时间:2018-12-24 06:05:12

标签: php session symfony-3.4

我正在使用symfony 3.4。我可以在同一控制器内设置和获取会话数据。但是在其他控制器中获取相同的会话数据会引发异常:“调用成员函数get()为null”。

下面是我正在使用的代码:

   Controller1.php(Working)
   $this->session = new Session();
   $this->session->start();    
   /*** Set Session Data ***/
   $this->session->set('userid', $dbres [0]['user_id']);

   /*** Get Session Data ***/
   $user_id = $this->session->get('userid');

   Controller2.php(Not Working) 
   /*** Get Session Data ***/
   $user_id = $this->session->get('userid');

   Exception : "Call to a member function get() on null"

2 个答案:

答案 0 :(得分:0)

Controller1.php(正在运行)

 $this->session = new Session();
   $this->session->start();    
   /*** Set Session Data ***/
   $this->session->set('userid', $dbres [0]['user_id']);

   /*** Get Session Data ***/
   $user_id = $this->session->get('userid');

Controller2.php(不起作用)

  /*** Get Session Data ***/
   $this->session = new Session();
   $this->session->start();    
   $user_id = $this->session->get('userid');
  

异常:“在null上调用成员函数get()”是因为尚未在控制器2上定义$this->session

答案 1 :(得分:0)

您为什么不通过SessionInterface进行操作?像这样:

public function showAction(SessionInterface $session)
{
    $session->set('user_id', 1);
}

因此在Controller 2中,您可以这样获得user_id:

public function showAction(SessionInterface $session)
{
    $session->get('user_id'); // You can test $session->has('user_id')
}

如果要创建特定会话,请使用静态方法getInstance和private构造函数创建User(或其他)类。在create方法中,如果返回true,则测试session是否存在,否则调用构造函数。这里是一个例子:

public static function getInstance($new = false)
{
    if(is_null(self::$_session)) {
        self::$_session = new Session();
        self::$_session->start();
    }

    if($new)
    {
        self::$_session->set('user_instance', new self(self::$_session));
        return self::$_session->get('user_instance');
    }

    if(!self::$_session->has('user_instance')) {
        self::$_session->set('user_instance', new self(self::$_session));
    }

    return self::$_session->get('user_instance');
}

我希望它会对您有所帮助。