0

我正在尝试使用以下代码扩展表单验证库:

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

我试图在构造时加载会话库,但又遇到了错误。是否有任何选项可以在内部使用会话库,或者我应该将会话中的值作为第二个参数传递?

4

2 回答 2

2

如果您需要从库中访问另一个加载的库,则需要访问 codeigniter 实例。

当您扩展现有的表单验证库时,您可以使用以下方法访问 codeigniter 实例:

$this->CI

因此,在您的情况下,您可以使用以下方式访问会话:

$this->CI->session->userdata('captcha')
于 2013-07-22T19:49:46.157 回答
0

codeigniter 中的库必须获取 CI 对象的实例(调用会话时您会认为它是 $this)。

将以下内容添加到您的构造函数中:

$CI =& get_instance();

现在在引用 CI 对象的属性/方法时,只需使用 $CI 而不是 $this:

if($captcha == $CI->session->userdata('captcha'))

等等。因此,当需要库之外的东西时使用 $CI,否则,您可以使用 $this

于 2013-07-22T19:51:59.217 回答