无法在其他控制器中获取会话数据
Unable to get session data in other Controllers
我正在使用 symfony 3.4。我能够在同一个控制器中设置和获取会话数据。但是在其他控制器中获取相同的会话数据会引发异常:"Call to a member function get() on 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"
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');
Exception : "Call to a member function get() on null" Because you have not define $this->session
on controller 2
你为什么不在操作中传递 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 和私有构造函数创建一个用户(或其他)class。在 create 方法中测试 session 是否存在 if true return session else 调用构造函数。举个例子:
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');
}
希望对你有所帮助
我正在使用 symfony 3.4。我能够在同一个控制器中设置和获取会话数据。但是在其他控制器中获取相同的会话数据会引发异常:"Call to a member function get() on 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"
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');
Exception : "Call to a member function get() on null" Because you have not define
$this->session
on controller 2
你为什么不在操作中传递 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 和私有构造函数创建一个用户(或其他)class。在 create 方法中测试 session 是否存在 if true return session else 调用构造函数。举个例子:
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');
}
希望对你有所帮助