2013-04-14 31 views
1

我在代码点火器中创建了自定义验证。我有以下代码,但is_FieldUnique验证不起作用。即使,我var_dump()的参数仍然没有得到它显示。我在下面的代码中做了什么错误?我没有得到任何回报is_FieldUnique但默认验证工作正常,如required,min_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的新手,并开始学习。

回答

2

如果要扩展本机库,则必须正确地为自定义库添加前缀。默认前缀是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); 
} 

确保您正在将控制库或autoload库加载到它。你并不需要包括类的前缀,当你加载库:

$this->load->library('form_validation'); 

我猜你已经添加了几行的你is_FieldUnique功能进行调试,但你绝对不希望exit()之前return,因为这将退出脚本,并不会允许任何返回。这也是我不明白什么该函数返回(!也许我只是暗淡),所以这样的说法应该有所帮助:

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

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

+0

是的,它仅用于调试目的。我添加了exit()来仔细检查方法是否被执行。但在我的代码中很难说,我的自定义验证方法都没有成功执行。我会尝试你的代码。谢谢您的帮助。 – user1149244

+0

我已经尝试过您的建议,但自定义字段验证仍然无法正常工作。我一步一步地调试代码,然后发现问题。我收到了此错误消息,无法找到验证规则:is_Fieldunique。我在我的控制器中加载了自定义库。这里可能是什么问题? – user1149244

+0

我编辑了我的答案,进行了一些更详细的介绍 - 希望这对于帮助您加载和使用验证功能会很有帮助。您似乎也只将1个参数传递给预期为2的验证函数。 – jleft