配置文件中表单验证的回调函数
Callback function for form validation in config file
我正在尝试进行电子邮件验证,其中电子邮件的域为 @abc123.com
。我已将我的表单验证规则分离到名为 form_validation.php
的 application/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')**
),
我正在尝试进行电子邮件验证,其中电子邮件的域为 @abc123.com
。我已将我的表单验证规则分离到名为 form_validation.php
的 application/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 功能放在同一个控制器中。如果您没有在回调中收到错误消息,请在 运行()
中传递 $thisif ($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')**
),