扩展codeigniter form_validation类返回undefined

时间:2016-03-10 07:53:51

标签: php codeigniter

我制作了一个扩展CI_Form_validation class的简单类,并将其放在application\libraries\MY_Form_validation.php中。这是文件中的代码:

<?php

class MY_Form_validation extends CI_Form_validation {


    public function __construct(){

        parent::__construct();

    }

    public function uniquekey($str){

       if($str == 'anda'){
          $this->form_validation->set_message('uniquekey', "The category name has been used");
          return false;
       } else {
          return true;
       }
    }
}

?>

在另一个名为Category的类中,我做了$this->load->library('form_validation');并在验证输入文本框时使用了上面的回调函数。

但是,当我尝试提交表单时,服务器返回了两个错误框,第一个错误说:

Message: Undefined property: MY_Form_validation::$form_validation
Filename: libraries/MY_Form_validation.php

第二个错误说:

Message: Call to a member function set_message() on null
Filename: /opt/lampp/htdocs/onesource_reboot/application/libraries/MY_Form_validation.php

我的代码中出错了什么?我从here读取并使用codeigniter 3.0.4版

我终于做到了,感谢narfdevpro,当我插入单词'anda'并提交表单时,表单验证将返回false并显示所需的错误消息。 我尝试了一些涉及数据库交互的更复杂的验证。我在构造函数中添加了这一行,仍然在同一个类中:

public function __construct(){

    parent::__construct();
    $this->CI->load->database();

}

并将我的uniquekey函数更改为:

public function uniquekey($str){

    $this->CI->db->select('CategoryName');
    $this->CI->db->where('CategoryName', $str);
    $result = $this->CI->db->get('category');
    if($result->num_rows > 0){
        $this->set_message('uniquekey', 'Kategori telah terpakai');
        return false;
    } else {
        return true;
    }

}

并提交了表格,这是我得到的结果:

Unable to access an error message corresponding to your field name Kategori.(uniquekey)

现在是什么?

解决。 我不知道这是不是一个错误,但这就是我做的工作。

public function uniquekey($str){

    $this->CI->db->select('CategoryName');
    $this->CI->db->where('CategoryName', $str);
    $result = $this->CI->db->get('category');
    $numrows = $result->num_rows();

    if(numrows > 0) {
        $this->set_message('uniquekey', 'Kategori telah terpakai');
        return false;
    } else {
        return true;
    }

}

2 个答案:

答案 0 :(得分:1)

您没有检查条件,您在此处指定值:

if($str = 'anda'){

这应该是:

if($str == 'anda'){
  

=符号用于指定值
  == sign用于比较值

答案 1 :(得分:1)

仅从控制器和/或模型内部使用$this->form_validation

当你进入库本身时,你处于一个不同的范围,form_validation属性不存在......而你首先不需要它 - 你只需要使用{ {1}},所以$this代替$this->set_message()

了解OOP的工作原理:http://www.php.net/manual/en/language.oop5.basic.php