簡體   English   中英

無法在其他控制器中獲取會話數據

[英]Unable to get session data in other Controllers

我正在使用symfony 3.4。 我可以在同一控制器內設置和獲取會話數據。 但是在其他控制器中獲取相同的會話數據會引發異常:“在null上調用成員函數get()”。

以下是我正在使用的代碼:

   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"

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

您為什么不通過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');
}

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM