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

CodeIgniter中redirect withInput()无法传递验证错误的问题求助

解决CodeIgniter重定向后验证错误无法传递的问题

问题核心是重定向属于全新HTTP请求,原请求的验证对象不会自动保留,你需要把验证错误存入Session Flash数据,再在目标方法中取出使用。

1. 修改save()方法:将验证错误存入Session

在验证失败时,除了携带表单输入,还要通过with()方法把当前验证实例存入Session:

public function save()
{
    //validasi input
    if (!$this->validate([
        'judul' => 'required|is_unique[komik.judul]'
    ])) {
        // 把验证实例存入Session Flash(仅保留一次请求)
        return redirect()->to('/komik/create')
            ->withInput()
            ->with('validation', $this->validator);
    }
}

注:$this->validator是CodeIgniter自带的当前验证实例,和\Config\Services::validation()效果一致,写法更简洁。

2. 修改create()方法:从Session读取验证错误

不要直接生成新的验证实例,优先从Session获取之前传递的验证对象,无则创建新实例:

public function create()
{
    session();
    // 优先读取Session中的验证错误,没有则生成新验证实例
    $validation = session('validation') ?? \Config\Services::validation();
    
    $data = [
        'title' => 'Form Tambah Data Komik',
        'validation' => $validation
    ];
    return view('komik/create', $data);
}

原代码失效原因

  • redirect()->to()会触发全新请求,原请求中的验证对象会被销毁,无法直接传递到新请求。
  • 你之前在create()中直接生成\Config\Services::validation(),得到的是一个无错误记录的干净验证对象,因此视图无法显示错误。

视图代码无需修改

你的create.php视图已经正确调用$validation->listErrors(),修改上述两个方法后即可正常显示验证错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:35:21