如何将第三个参数(字段名)传入表单验证回调函数?
如何在CodeIgniter表单验证回调中传入字段名
嘿,这个问题我刚好碰到过,有两种实用的方法可以解决,看你偏好哪种:
方法1:手动将字段名作为回调参数传入
这种方法直接明了,你只需要在set_rules的回调参数里加上字段的显示名称,然后在回调函数里接收这个参数就行:
修改后的验证规则代码
public function registration() { // 其他代码... // 在回调参数里加入字段显示名称(这里是"Password")作为第一个额外参数 $this->form_validation->set_rules('password', 'Password', 'required|callback__check_length[Password,6,10]'); }
更新后的回调函数
function _check_length($input, $field_name, $min, $max) { $length = strlen($input); if ($length >= $min && $length <= $max) { return TRUE; } elseif ($length < $min) { // 用传入的字段名生成错误提示 $this->form_validation->set_message('_check_length', '*'.$field_name.'* 的最小字符数是 '.$min); return FALSE; } elseif ($length > $max) { $this->form_validation->set_message('_check_length', '*'.$field_name.'* 的最大字符数是 '.$max); return FALSE; } }
注意:回调函数的第一个参数永远是用户输入的字段值,后面的参数顺序要和你在[]里写的顺序完全对应。
方法2:自动获取字段名(更优雅)
如果不想每次都手动传字段名,可以利用CodeIgniter的表单验证类自带的方法,自动获取当前验证字段的显示名称,这样代码更易维护:
保持原有的验证规则
public function registration() { // 其他代码... // 还是原来的规则,不用额外传字段名 $this->form_validation->set_rules('password', 'Password', 'required|callback__check_length[6,10]'); }
更新后的回调函数
function _check_length($input, $min, $max) { // 获取当前正在验证的字段的详细信息 $field_info = $this->form_validation->field_data($this->form_validation->current_field); // 取出字段的显示名称(就是你在set_rules里写的第二个参数"Password") $field_name = $field_info['label']; $length = strlen($input); if ($length >= $min && $length <= $max) { return TRUE; } elseif ($length < $min) { $this->form_validation->set_message('_check_length', '*'.$field_name.'* 的最小字符数是 '.$min); return FALSE; } elseif ($length > $max) { $this->form_validation->set_message('_check_length', '*'.$field_name.'* 的最大字符数是 '.$max); return FALSE; } }
这种方法的好处是,不管你以后修改字段的显示名称,或者把这个回调复用在其他字段上,都不需要调整回调的参数,非常灵活。
内容的提问来源于stack exchange,提问作者Asad Iftikhar
相关产品推荐
相关产品推荐

