You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将第三个参数(字段名)传入表单验证回调函数?

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:53:52