CodeIgniter 4验证错误信息不显示问题求助
问题排查与修复
核心问题分析
你的代码存在两个关键错误,导致验证错误无法正常显示:
- Flashdata 操作错误:控制器中误用
session()->getFlashdata('errors', ...),这是读取flashdata的方法,而非写入。正确操作应为setFlashdata来存储错误信息。 - 重定向数据传递错误:
redirect()->to(...)->withInput('validation', ...)写法不符合CI4规范,withInput()无需参数,验证实例应通过with()传递,或直接将错误存入flashdata。
修复后的控制器代码
public function Daftar() { // 定义验证规则 $validationRules = [ 'nim' => [ 'label' => 'NIM', 'rules' => 'required|is_unique[tbl_anggota.nim]', 'errors' => [ 'required' => '{field} Masih Kosong!', 'is_unique' => '{field} NIM Sudah Terdaftar!', ] ], 'nama' => [ 'label' => 'Nama', 'rules' => 'required', 'errors' => [ 'required' => '{field} Masih Kosong!', ] ], 'password' => [ 'label' => 'Password', 'rules' => 'required', 'errors' => [ 'required' => '{field} Masih Kosong!', ] ], 'ulangi_password' => [ 'label' => 'Ulangi Password', 'rules' => 'required|matches[password]', 'errors' => [ 'required' => '{field} Masih Kosong!', 'matches' => '{field} Password Tidak Sama!', ] ], ]; // 验证通过逻辑 if ($this->validate($validationRules)) { // 此处添加验证通过后的业务代码(如写入数据库) } else { // 将验证错误存入Session Flashdata session()->setFlashdata('errors', \Config\Services::validation()->getErrors()); // 重定向回登录页并携带用户输入的表单数据 return redirect()->to(base_url('Auth/Login'))->withInput(); } }
视图代码无需修改
你的视图代码逻辑正确,只要控制器正确存入errors类型的flashdata,即可正常渲染错误提示。
额外检查项
- 确认控制器已加载Session服务(CI4默认自动加载,若手动关闭需在构造函数中初始化:
$this->session = \Config\Services::session();) - 验证重定向目标页
Auth/Login确实包含你提供的错误提示视图代码 - 检查浏览器控制台是否存在Session相关报错,确保Session服务正常运行
内容的提问来源于stack exchange,提问作者Pattoriku
相关产品推荐
相关产品推荐

