Codeigniter回调影响所需的验证

时间:2016-10-23 15:33:08

标签: php codeigniter

我正在使用codeigniter 3.1.1。我是codeigniter的新手,我遇到了一个问题,我可以搞清楚。我的回调函数似乎影响了所需的验证,因为似乎跳过了所需的规则,即使字段为空,也会执行回调函数。这是我的代码

$validate_data = array(

        array(

            'field' => 'pages',
            'label' => 'No of pages',
            'rules' => 'trim|required|integer|callback_regex_pages'
            )
  );

  $this->form_validation->set_rules($validate_data);
  $this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');

我的回调功能

   public function regex_pages(){

if(!preg_match('/^\d(\d)?(\d)?$/',$this->input->post('pages'))){

    $this->form_validation->set_message('regex_pages', 'The {field} is not valid!');

    return false;

    }else{

    return true;

    }
   }//end method regex_pages

这只是我用这种方式行动的众多回调之一。如果我删除回调规则,则执行所需规则

这是我的输出

My output

2 个答案:

答案 0 :(得分:1)

无论字段值是否有效,都设置消息。

 public function regex_pages($value){

   //set message anyway
   $this->form_validation->set_message('regex_pages', 'The {field} is not valid!');

   //the rule will be available for any field, not just for pages
   return (bool) preg_match('/^\d(\d)?(\d)?$/',$value);

}

您还可以使用Codeigniter regex_match规则。 http://www.codeigniter.com/user_guide/libraries/form_validation.html?highlight=form%20validation#CI_Form_validation

'rules' => 'trim|required|integer|regex_match[//]'

答案 1 :(得分:0)

我建议您通过创建一个名为&#34; MY_form_validation&#34;的新库来扩展您的表单验证库。这将扩展&#34; CI_form_validation&#34;并将其保存在&#34; libraries&#34;夹;在此之后,将所有回调函数放在MY_form_validation中,这样,您将有全局可用的回调,但请记住,您不需要使用前缀&#34;回调&#34;设置规则。 这是一个例子:

$validate_data = array(

    array(

        'field' => 'pages',
        'label' => 'No of pages',
        'rules' => 'trim|required|integer|regex_pages'
        )

);

$this->form_validation->set_rules($validate_data);
$this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');

因此,在MY_form_validation中,您将创建函数

public function regex_pages($value_to_be_validated){

if(!preg_match('/^\d(\d)?(\d)?$/',$value_to_be_validated)){

$this->set_message('regex_pages', 'The {field} is not valid!');

return false;

}else{

return true;

}