配置文件中表单验证的回调函数

Callback function for form validation in config file

我正在尝试进行电子邮件验证,其中电子邮件的域为 @abc123.com。我已将我的表单验证规则分离到名为 form_validation.phpapplication/config 文件夹中的另一个文件中。我的规则之一是 callback_email_check.

我应该把函数放在哪里?在主控制器中还是与我所有表单验证规则所在的 form_validation.php 文件一起?我试过同时使用这两个选项,但在我显示错误消息的地方,我得到的输出是 Unable to access an error message corresponding to your field name Email.(email_check).

function email_check($email)
{
    if( strpos($email, '@abc123.com') !== FALSE ) return TRUE;

    $this->form_validation->set_message('email', 'Please use abc123 email only.');

    return FALSE;
}

form_validation.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/* Form Validation Rules */

$config = array(
    'login' => array(
            array(
                    'field' => 'user_id',
                    'label' => 'User ID',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'password',
                    'label' => 'Password',
                    'rules' => 'trim|required'
            )
    ),
    'sign_up' => array(
            array(
                    'field' => 'user_id',
                    'label' => 'User ID',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'name',
                    'label' => 'Name',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'email',
                    'label' => 'Email',
                    'rules' => 'trim|required|valid_email|callback_email_check'
            ),
            array(
                    'field' => 'department',
                    'label' => 'Department',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'password',
                    'label' => 'Password',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'cfm_password',
                    'label' => 'Re-type Password',
                    'rules' => 'trim|required|matches[password]'
            )
    ),
    'edit_profile' => array(
            array(
                    'field' => 'new_password',
                    'label' => 'New Password',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'retype_password',
                    'label' => 'Re-type Password',
                    'rules' => 'trim|required|matches[new_password]'
            )
    ),
    'forgot_password' => array(
            array(
                    'field' => 'user_id',
                    'label' => 'User ID',
                    'rules' => 'trim|required'
            ),
            array(
                    'field' => 'email',
                    'label' => 'Email',
                    'rules' => 'trim|required|valid_email|callback_email_check'
            )
    )
);
?>

在您的函数 email_check 中,set_message 不正确,它应该与函数同名。

改变这个

$this->form_validation->set_message('email', 'Please use abc123 email only.');

$this->form_validation->set_message('email_check', 'Please use abc123 email only.');

回调http://www.codeigniter.com/userguide2/libraries/form_validation.html#callbacks

我也遇到了同样的问题,我是这样解决的...

您可以将 email_check 功能放在同一个控制器中。如果您没有在回调中收到错误消息,请在 运行()

中传递 $this

if ($this->form_validation->运行($this)) { ...}

并将控制器方法与规则组相关联 -

$配置=数组( 'controller/method' => 数组(...));

查看 link 了解更多信息:[将控制器方法与规则组相关联][1]

干杯!!

只需在您的配置中添加这一行:

array(
      'field' => 'email',
      'label' => 'Email',
      'rules' => 'trim|required|valid_email|callback_email_check',
       **'errors' => array('email_check' => 'Your Error Message')**
),