代码点火器自定义字段验证不工作(Code Igniter Custom Field Validati

2019-10-18 00:05发布

我创建了代码点火器自定义验证。 我有以下代码,但is_FieldUnique验证是行不通的。 即使,我var_dump()的参数还是我没有得到它显示。 我在做什么毛病我下面的代码? 我没有得到与任何回报is_FieldUnique但默认的验证工作正常,如requiredmin_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');
    }
}

有什么能自定义字段不工作的原因吗? 我知道这可能是大家很简单,但我是新来的笨并开始学习。

Answer 1:

如果要扩展一个本地库必须正确前缀您的自定义库。 默认的前缀是MY_这可以在被改变application/config/config.php ,用这种配置: $config['subclass_prefix'] = 'MY_';

所以这:

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()的前return ,因为这将退出脚本并不会允许任何返回。 这也是我不明白什么函数返回(也许我只是朦胧的!),所以这样的说法应该有所帮助:

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

你也可以考虑使用一个回调 ,这是添加自己的验证规则的常见方式。



文章来源: Code Igniter Custom Field Validation Not Working