使用codeingiter以_validation.php格式创建自定义验证回调

使用codeingiter以_validation.php格式创建自定义验证回调,php,codeigniter,validation,email-validation,Php,Codeigniter,Validation,Email Validation,您好,我正在尝试为我的表单创建一个验证回调,以便仅在字段不为空时验证该字段。我将验证规则创建到名为form\u validation.php的配置文件中。 以下是其内容的一部分: $config=array( 'Users_Controller/add'=>array( array( 'field'=>'email', 'label'=>'email', 'rules'=>'cal

您好,我正在尝试为我的表单创建一个验证回调,以便仅在字段不为空时验证该字段。我将验证规则创建到名为form\u validation.php的配置文件中。 以下是其内容的一部分:

$config=array(
  'Users_Controller/add'=>array(
        array(
            'field'=>'email',
            'label'=>'email',
            'rules'=>'callback_email'
        ),
   )
);

public function email($value){
   if( trim( strlen($value) )!==0 ){
      $this->form_validation->set_rules(
         'email',
         'email',
         'valid_email|is_unique[users.email]',
          array(
             'valid_email'=>'invalid email',
             'is_unique' => 'email already registered'
         )
      )
   }
}
在我的控制器中,在users\u controller.php中,我是如何处理表单提交的:

class Users_Controller  extends CI_Controller{
     public function add(){
         if($this->form_validation->run()){
              $this->User_model->save();
              $this-session->set_flashdata('success','okay');
              redirect('users/list');
         }
         else {
              $this->load->view('add')
         }
     }
}
不幸的是,验证没有考虑我在配置文件form_validation.php中添加的回调验证方法,但是如果我将此回调放在控制器中,验证过程将忽略form_validation.php

/*put callback rule in form_validation.php*/

$config=array(
   'Users_Controller/add'=>array(
    array(
        'field'=>'email',
        'label'=>'email',
        'rules'=>'callback_check_email'
    ),
  )
);
function check_email($value)
{
    /*check your email rule here as u want */
    /* this is just example*/ 

    $email= $this->YourModel->getemailofUser();
    if ($value == $email) {
        return TRUE;
    }
    else 
    {
        $this->form_validation->set_message('check_email', 'Your email is not a valid registered email!');
        return FALSE;
    }

有什么帮助吗?提前感谢。

希望这对您有所帮助

form_validation.php

/*put callback rule in form_validation.php*/

$config=array(
   'Users_Controller/add'=>array(
    array(
        'field'=>'email',
        'label'=>'email',
        'rules'=>'callback_check_email'
    ),
  )
);
function check_email($value)
{
    /*check your email rule here as u want */
    /* this is just example*/ 

    $email= $this->YourModel->getemailofUser();
    if ($value == $email) {
        return TRUE;
    }
    else 
    {
        $this->form_validation->set_message('check_email', 'Your email is not a valid registered email!');
        return FALSE;
    }
在Users\u controller.php中放入回调方法

/*put callback rule in form_validation.php*/

$config=array(
   'Users_Controller/add'=>array(
    array(
        'field'=>'email',
        'label'=>'email',
        'rules'=>'callback_check_email'
    ),
  )
);
function check_email($value)
{
    /*check your email rule here as u want */
    /* this is just example*/ 

    $email= $this->YourModel->getemailofUser();
    if ($value == $email) {
        return TRUE;
    }
    else 
    {
        $this->form_validation->set_message('check_email', 'Your email is not a valid registered email!');
        return FALSE;
    }
在Users\u controller.php中

/*put callback rule in form_validation.php*/

$config=array(
   'Users_Controller/add'=>array(
    array(
        'field'=>'email',
        'label'=>'email',
        'rules'=>'callback_check_email'
    ),
  )
);
function check_email($value)
{
    /*check your email rule here as u want */
    /* this is just example*/ 

    $email= $this->YourModel->getemailofUser();
    if ($value == $email) {
        return TRUE;
    }
    else 
    {
        $this->form_validation->set_message('check_email', 'Your email is not a valid registered email!');
        return FALSE;
    }
}


更多信息:

要调用特定的验证规则组,如
用户\u控制器/add
,需要将组名传递给
运行()
方法。
Users\u controller.php

    ...
    public function add(){
        if($this->form_validation->run('Users_Controller/add')){
        ...
    }
    ...

为了使验证回调正常工作,必须将回调方法放在调用回调的方法的同一控制器中

请检查此链接:-在表单验证期间使用多个参数的codeigniter谢谢我的工作,但我想在配置文件中保留回调函数。有什么方法可以点画吗?我从来没有实现过,因为文档中没有描述谢谢。通过将回调函数添加到控制器中,我最终找到了解决方案。