Php 扩展codeigniter form_验证类返回未定义的

Php 扩展codeigniter form_验证类返回未定义的,php,codeigniter,Php,Codeigniter,我创建了一个扩展CI\u Form\u validation类的简单类,并将其放置在application\libraries\MY\u Form\u validation.php中。以下是文件中的代码: <?php class MY_Form_validation extends CI_Form_validation { public function __construct(){ parent::__construct(); } pu

我创建了一个扩展
CI\u Form\u validation类的简单类
,并将其放置在
application\libraries\MY\u Form\u 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;
       }
    }
}

?>
第二个错误是:

Message: Call to a member function set_message() on null
Filename: /opt/lampp/htdocs/onesource_reboot/application/libraries/MY_Form_validation.php
我在代码中做错了什么?我阅读并正在使用codeigniter 3.0.4版


多亏了,我终于成功了。当我插入单词“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)
现在怎么办


解决了。 我不知道这是不是一个bug,但我做了些什么来让它工作

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;
    }

}

您不是在检查条件,而是在此处赋值:

if($str = 'anda'){
这应该是:

if($str == 'anda'){
=符号用于分配值
==符号用于比较值


只能从内部控制器和/或模型中使用
$this->form\u验证

当您在库本身内部时,您处于不同的作用域中,
form\u validation
属性不存在。。。而且你一开始并不需要它-你只需要使用
$this
,所以它是
$this->set\u message()
,而不是
$this->form\u validation->set\u message()


仔细阅读OOP的工作原理:

这确实解决了一个有效的问题,但并没有真正回答问题。@Anggiariwidhia:选择最佳答案并标记为已接受。还有一个问题,你能再次帮我吗?@Anggiariwidhia:你在哪里使用这个回调函数uniquekey()??此值不匹配KategoriI正在
我的表单\u验证中使用此回调函数。现在它是solvedI,我认为它是parent::set_message(),因为我正在扩展parent的函数。谢谢你的回答。还有一个问题,你能再帮我一次吗?你不应该在原来的问题上添加越来越多的问题。。。打开一个新的。
if($str == 'anda'){