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

CodeIgniter 4 自定义验证规则组新增字段后错误信息不显示如何解决

问题原因

该问题由四个常见的 CodeIgniter4 开发错误共同导致:

  1. 验证错误获取方法使用不当:$validation->getError()方法仅适用于获取单个指定字段的错误,多字段同时验证失败时该方法的返回结果不符合预期。
  2. 前端响应解析逻辑缺失:后端返回JSON格式响应时,前端直接读取responseText属性会拿到未解析的JSON字符串,部分场景下会导致SweetAlert显示异常。
  3. 验证规则不合理:数字类型字段使用min_length规则,该规则本身是针对字符串长度设计,应用到数字字段会出现不符合预期的校验结果。
  4. 提交数据获取方式错误:前端直接发送FormData对象作为请求体,后端不需要通过getPost("formData")获取参数,该写法会导致读取到空值。

解决方法

1. 修改控制器代码

// Validasi Form Data
$this->valid    = \Config\Services::validation();
$this->valid->setRuleGroup('produk');
// 不传参数时验证类会自动读取全局POST数据
if (!$this->valid->run()) {
    // 获取所有错误并拼接为换行分隔的字符串
    $errorMsg = implode("<br>", $this->valid->getErrors());
    return $this->response->setStatusCode(500)->setJSON($errorMsg);
}

2. 优化前端错误处理逻辑

$.ajax({
    url: `../admin/produk/savedata`,
    method: 'POST',
    processData: false,
    contentType: false,
    data: formData,
    success: () => {
        Swal.fire({
            icon: 'success',
            title: 'Data produk berhasil diinput.',
            showConfirmButton: true,
            timer: 2500
        });
    },
    error: (msg) => {
        // 优先读取解析后的JSON响应
        const showMsg = msg.responseJSON || msg.responseText;
        Swal.fire({
            icon: 'error',
            title: showMsg,
            showConfirmButton: true,
            timer: 2500
        });
    }
});

3. 修正验证规则

将harga_produk字段的min_length规则替换为数字适用的greater_than规则,同时检查规则数组的语法完整性,确保没有缺失括号、逗号:

public $produk = [
    'nama_produk'     => [
        'label'     =>  'Nama Produk',
        'rules'     =>  'required|alpha_numeric_space|min_length[3]',
        'errors'    =>  [
            'required'              =>  '{field} harus diisi.',
            'alpha_numeric_space'   =>  'Hanya boleh mengisi huruf, angka atau spasi pada kolom {field}.',
            'min_length'            =>  'Nama produk yang diinput setidaknya harus {param} karakter.'
        ],
    ],
    'harga_produk'     => [
        'label'     =>  'Harga Produk',
        // 用greater_than限制价格最小值,示例为最低100
        'rules'     =>  'required|numeric|greater_than[99]',
        'errors'    =>  [
            'required'      =>  '{field} harus diisi.',
            'numeric'       =>  'Hanya boleh mengisi dengan angka pada kolom {field}.',
            'greater_than'  =>  'Harga produk yang diinput setidaknya harus {param} rupiah.'
        ]
    ]
];

内容的提问来源于stack exchange,提问作者Viole Grace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:04