Php Codeigniter从helper函数返回验证错误
我有一个助手函数来检查用户名是否有效 在帮助文件中:Php Codeigniter从helper函数返回验证错误,php,forms,validation,codeigniter,Php,Forms,Validation,Codeigniter,我有一个助手函数来检查用户名是否有效 在帮助文件中: if ( ! function_exists('valid_username')) { function valid_username($username) { $ci=& get_instance(); $ci->load->database(); if (empty($username) OR !preg_match("/^[a-z]([0-9a-z_
if ( ! function_exists('valid_username'))
{
function valid_username($username)
{
$ci=& get_instance();
$ci->load->database();
if (empty($username) OR !preg_match("/^[a-z]([0-9a-z_-])+[0-9a-z]$/i", $username)) //Allowed a-z, 0-9, and underscores. Must end in a-z or 0-9.
{
$ci->form_validation->set_message('valid_username', 'Characters not valid.');
return FALSE;
}
$ci->db->select('username');
$ci->db->where('username', $username);
$ci->db->where('activated', 1);
$ci->db->where('banned', 0);
$ci->db->limit(1);
$query = $ci->db->get('users');
if ($query->num_rows() > 0) //if user exists
{
return TRUE;
}
else
{
$ci->form_validation->set_message('valid_username', 'The %s does not exist.');
return FALSE;
}
}
}
在我的控制器中,我正在将助手添加到我的表单验证中:
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback_valid_username');
//add callback from helper function
function valid_username($username)
{
return valid_username($username);
}
这很好,但是我必须将回调设置为私有,如下所示:
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[2]|max_length[50]|callback__valid_username');
function _valid_username($username)
{
return valid_username($username);
}
将回调设置为私有后,我在提交无效用户名时收到以下消息:
无法访问与字段名对应的错误消息
我在这里做错了什么?我不能100%确定为什么使函数私有化会破坏您的错误消息,但我可以建议一种解决方法: 表单验证规则允许接受最多1个参数的任何函数用作验证或准备规则。因此,基本上,当前脚本可用的任何内容都可以作为表单验证规则使用,包括
valid\u username()
函数。尝试以下方法(只需将其添加到其他规则中):
因此,您不需要将controller方法作为包装器,也不需要使用回调
查看这是否适合您
搁置一旁:我建议在定义
有效的\u用户名()
时跳过函数\u exists()
调用,除非您确定要允许“覆盖”该函数。您可以使用任何可调用的规则。即使它是助手中的一个函数
正确的语法是:
$this->form_validation->set_rules(
'username', 'Username', array('required', array('valid_username_callable', 'valid_username')));
在帮助程序中,如有必要,设置错误消息,如下所示:
$CI = &get_instance();
$CI->form_validation->set_message('valid_username_callable', 'Error message');
谢谢我不想使用回调,但由于某些原因,如果没有
回调
,这个特定的helper函数在表单验证规则上无法工作。在set\u消息(\u valid\u username)
中添加下划线似乎是问题所在。
$CI = &get_instance();
$CI->form_validation->set_message('valid_username_callable', 'Error message');