Codeigniter 代码点火器自定义现场验证不工作

Codeigniter 代码点火器自定义现场验证不工作,codeigniter,validation,Codeigniter,Validation,我在CodeIgniter中创建了一个自定义验证。我有以下代码,但是唯一的验证不起作用。即使,我var_dump()参数仍然没有得到它显示的值。下面的代码有什么问题?我没有收到任何关于is_FieldUnique的返回,但是默认验证工作正常,就像required,minu length 在application/libraries/Customfieldvalidation.php中,我有以下代码行: class Customfieldvalidation extends CI_Form_val

我在CodeIgniter中创建了一个自定义验证。我有以下代码,但
是唯一的
验证不起作用。即使,我
var_dump()
参数仍然没有得到它显示的值。下面的代码有什么问题?我没有收到任何关于
is_FieldUnique
的返回,但是默认验证工作正常,就像
required
minu length

application/libraries/Customfieldvalidation.php
中,我有以下代码行:

class Customfieldvalidation extends CI_Form_validation 
    {
        public function is_FieldUnique($str, $field)
        {
            var_dump($str);
            var_dump($field);
            list($table, $field)=explode('.', $field);
            $q = $this->CI->db->query("SHOW KEYS FROM $table WHERE Key_name = 'PRIMARY'")->row();
            $primary_key = $q->Column_name;
            if($this->CI->input->post($primary_key) > 0):
                $query = $this->CI->db->limit(1)->get_where($table, array($field => $str,$primary_key.' !='=>$this->CI->input->post($primary_key)));
            else:
                $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
            endif; 
            echo $query;
            exit();
            return $query->num_rows() === 0;
        }
    }
在我的控制器中,我有以下代码:

class User extends CI_Controller 
{
    function __construct()
    {
        parent::__construct();
        $this->load->library('customfieldvalidation');
    }
    function _setRules()
    {
        $this->form_validation->set_rules('email_address', 'Email Address', 'required|valid_email|min_length[8]|is_FieldUnique[users.email_address]');
        $this->form_validation->set_message('is_FieldUnique', '* must have a unique value');
    }
}

自定义字段不工作的原因可能是什么?我知道这对每个人来说都很简单,但我是Codeigniter的新手,并开始学习。

如果要扩展本机库,必须正确地为自定义库添加前缀。默认前缀是
MY_uu
这可以在
application/config/config.php
中更改,使用此配置:
$config['subclass\u prefix']='MY_u'

因此:

class Customfieldvalidation extends CI_Form_validation
应该是:

class MY_Form_validation extends CI_Form_validation
还要确保文件名反映了这一点,并且位于适当的位置:

application/libraries/MY_Form_validation.php
您还需要一个构造函数来扩展父类:

function __construct($rules = array())
{
    parent::__construct($rules);
}
确保您正在控制器中加载库或将其加载。加载库时,不需要包含类前缀:

$this->load->library('form_validation');
我猜您已经在
is_FieldUnique
函数中添加了几行用于调试,但是您肯定不希望在
返回之前使用
exit()
,因为这将退出脚本,并且不允许返回任何内容。我也不清楚函数返回的是什么(可能我只是有点糊涂!),所以这样的语句应该会有所帮助:

if ($query->num_rows() === 0)
{
    return TRUE;
}
else
{
    return FALSE;
}

您也可以考虑使用A,这是添加自己的验证规则的常用方法。

是的,仅用于调试目的。我添加了exit()来双重检查方法是否已执行。但遗憾的是,在我的代码中,没有一个自定义验证方法成功执行。我会试试你的代码。谢谢你的帮助。我已经尝试了你的建议,但是自定义字段验证仍然不起作用。我一步一步地调试代码,发现了问题所在。我收到此错误消息,无法找到验证规则:is_Fieldunique。我已在控制器中加载自定义库。这里可能有什么问题?我已经编辑了我的答案,以便更详细地了解-希望这将有助于您加载和使用验证功能。您似乎只向验证函数传递了1个参数,期望传递2个。谢谢,我花了很多时间才弄明白。在CI中,不能只使用任何类名,否则它将无法加载。因此,我将类名从“my_Customfieldvalidation”更改为“my_Form_validation”。