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

CodeIgniter中Category::edit()参数不足错误及数据更新验证问题

问题诊断

报错ArgumentCountError是因为调用Category::edit()时未传入必要的$category_id参数。根源出在验证失败后的重定向逻辑:

  • update()方法中,验证失败时尝试通过$this->request->getVar('category_id')获取ID,但视图表单里没有提交category_id字段,导致该值为空,最终重定向到/category/edit/(无参数),触发参数不足错误。
  • 额外问题:验证规则里的is_unique未排除当前分类ID,更新时会误判为重复。
修复步骤

1. 补充视图表单的category_id字段

在视图的表单内添加隐藏字段,确保提交时携带category_id:

<form action="/Category/update/<?= $category['category_id'] ?>" method="post" enctype="multipart/form-data" class="form-horizontal">
    <?= csrf_field(); ?>
    <!-- 添加隐藏字段 -->
    <input type="hidden" name="category_id" value="<?= $category['category_id'] ?>">
    <!-- 原有表单内容不变 -->
    <div class="row form-group">
        <div class="col col-md-3">
            <label for="kategori" class=" form-control-label">Kategori</label>
        </div>
        <div class="col-12 col-md-9">
            <input type="text" id="kategori" name="kategori" 
                    placeholder="Masukkan kategori" 
                    class="form-control <?= ($validation->hasError('category_id')) ? 'is-invalid' : '' ?>" 
                    autofocus value="<?= (old('kategori')) ? old('kategori') : $category['kategori'] ?>">
    
            <div class="invalid-feedback">
                <?= $validation->getError('category_id'); ?>
            </div>
        </div>
    </div> <br>
    
    <div class="form-group row">
        <div class="col-3"></div>
        <div class="col-sm-4">
            <button type="submit" class="btn btn-primary">Simpan</button>
            <a href="/Category" class="btn btn-success">Kembali</a>
        </div>
    </div>
</form>

2. 优化重定向逻辑(更稳妥的方式)

直接使用update()方法已接收的$category_id参数,避免依赖请求变量:

public function update($category_id)
{
    if(!$this->validate([
        'category_id' => [
            'rules' => 'required|is_unique[category.category_id,category_id,' . $category_id . ']',
            'errors' => [
                'required' => '{field} harus diisi.',
                'is_unique' => '{field} sudah terdaftar.'
            ]
        ]
    ] )) {
        // 改用方法参数里的$category_id
        return redirect()->to('/category/edit/' . $category_id)
                    ->withInput();
    }

    $data = [
        'category_id' => $category_id,
        'kategori' => $this->request->getPost('kategori')
    ];
    $this->categoryModel->EditData($data);
    session()->setFlashData('pesan', 'Data berhasil diubah');
    return redirect()->to('/category');
}

3. 修正验证规则的is_unique逻辑

更新分类时,category_id本身是不变的,必须排除当前记录,否则会触发is_unique错误。规则修改为:

'rules' => 'required|is_unique[category.category_id,category_id,' . $category_id . ']'

其中category.category_id是表名+字段名,category_id是排除条件的字段,最后一个$category_id是当前要保留的ID值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:54:58