请看这个。
以下代码来自我的模型类(使用datamapper orm)
function login()
{
$u = new User();
$u->where('username', $this->username)->get();
$this->salt = $u->salt;
$this->validate()->get();
if (empty($this->id))
{
// Login failed, so set a custom error message
$this->error_message('login', 'Username or password invalid');
return FALSE;
}
else
{
// Login succeeded
$data = array
(
'username' => $u->username,
'usergroup' => $u->usergroup->get(),
'is_logged_in' => true
);
$this->session->set_userdata($data);
return TRUE;
}
}
当我这样做时,我得到了
**Fatal error: Call to a member function set_userdata() on a non-object**
但是当我这样做时
$data = array
(
'username' => $u->username,
'usergroup' => $u->usergroup->get(),
'is_logged_in' => true
);
$obj=& get_instance();
$obj->session->set_userdata($data);
有效。
请问正确的方法是什么?
提前致谢。
答案 0 :(得分:1)
您的模型未扩展CI_Model 之后,您必须将构造函数添加到模型中 将此代码添加到您的
function __construct()
{
parent::__construct();
$this->load->library('session');
}
答案 1 :(得分:0)
嗯,你没有提供足够的信息。 第一个代码看起来很好,只要:
您实际上在调用之前加载了会话类(您还需要在配置中创建加密密钥)。
$this->load->library('session');
$this->session->set_userdata($data);
上述代码或代码位于控制器,模型或视图中。
$this
与CI的超类相关,特别是与Session类的实例相关,因此如果您在帮助程序(函数集合)内部或在库内部(需要创建CI实例)中调用它首先),它将无法正常工作。