我正在尝试使用以下代码扩展表单验证库:
class MY_Form_validation extends CI_Form_validation {
public function __construct() {
parent::__construct();
}
public function check_captcha($captcha)
{
if ($captcha == $this->session->userdata('captcha'))
{
return TRUE;
} else
{
$this->form_validation->set_message('check_captcha', "Please copy captcha again.");
return FALSE;
}
}
}
当我运行验证时,我收到此错误:
Message: Undefined property: MY_Form_validation::$session
Filename: libraries/MY_Form_validation.php
我尝试在构造中加载会话库,但我再次出错。是否有在内部使用会话库的选项,或者我应该将会话值作为第二个参数传递给它吗?
答案 0 :(得分:2)
如果您需要从库中访问另一个已加载的库,则需要访问codeigniter实例。
在扩展现有的表单验证库时,可以使用以下命令访问codeigniter实例:
$this->CI
因此,在您的情况下,您可以使用以下方式访问会话:
$this->CI->session->userdata('captcha')
答案 1 :(得分:0)
库必须获取CI对象的实例(在调用会话时您将其视为$ this。)
将以下内容添加到您的构造函数中:
$CI =& get_instance();
现在在引用CI对象的属性/方法时,只需使用$ CI而不是$ this:
if($captcha == $CI->session->userdata('captcha'))
等等。因此,当需要库外的东西时使用$ CI,否则,你可以使用$ this