【问题标题】:Callback function for form validation in config file配置文件中表单验证的回调函数
【发布时间】:2015-12-26 09:55:54
【问题描述】:

我正在尝试进行电子邮件验证,其中电子邮件的域为@abc123.com。我已将表单验证规则分离到 application/config 文件夹中名为 form_validation.php 的另一个文件中。我的规则之一是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'
            )
    )
);
?>

【问题讨论】:

  • 回调函数放置在表单验证中调用它们的同一控制器中。
  • @AnmolRaghuvanshi 我试过了,但它返回相同的错误。
  • 你也会发布你的 set_rule 部分吗
  • @AnmolRaghuvanshi 那会忽略错误,我正在尝试设置规则以确保用户仅使用“@abc123.com”作为域。
  • @AnmolRaghuvanshi 已经尝试过了,就像我说它忽略了对域的检查,因为它总是TRUE

标签: php codeigniter validation email-validation


【解决方案1】:

在您的函数 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

【讨论】:

  • 我以为是名字,这是错误的。谢谢。
  • 不工作得到同样的错误任何建议@Wolfgang1983
【解决方案2】:

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

您可以将 email_check 函数放在同一个控制器中。如果您没有在回调中收到错误消息,请在 run() 中传递 $this

if ($this->form_validation->run($this)) { ...}

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

$config = 数组( '控制器/方法' => 数组(...));

查看更多链接:[将控制器方法与规则组关联][1]

干杯!!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多