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
相关产品推荐
相关产品推荐

