CodeIgniter 4 验证消息无法正常显示问题求助
问题:自定义验证错误消息无法显示
我已在HunterModel.php模型中配置了验证规则和自定义错误消息,HunterController.php的createHunter()方法用于插入数据记录。目前遇到的问题是:调用$this->$data->listError()无法显示我在$validationMessages中定义的验证错误消息。
相关代码
HunterModel.php
// Validation protected $validationRules = [ 'name_hunter' => 'required|max_length[30]', 'age_hunter' => 'required|integer', 'height_hunter' => 'required|decimal', 'weight_hunter' => 'required|decimal', 'type_hunter' => 'required|max_length[30]', 'type_nen' => 'required|max_length[30]', 'type_blood' => 'required|max_length[3]' ]; protected $validationMessages = [ 'name_hunter' => [ 'required' => 'Hunter name cannot be empty.', 'max_length' => 'The hunter name must have a maximum of 30 characters.' ], 'age_hunter' => [ 'required' => 'Hunter age cannot be empty.', 'integer' => 'The hunter\'s age must be an integer.' ], 'height_hunter' => [ 'required' => 'Hunter height cannot be empty.', 'decimal' => 'The hunter height must be a decimal number.' ], 'weight_hunter' => [ 'required' => 'Hunter weight cannot be empty.', 'decimal' => 'The hunter weight must be a decimal number.' ], 'type_hunter' => [ 'required' => 'It is necessary to define the type of hunter.', 'max_length' => 'The hunter type must be a maximum of 30 characters.' ], 'type_nen' => [ 'required' => 'It is necessary to define the nen of the hunter.', 'max_length' => 'The hunter\'s nen must have a maximum of 30 characters.' ], 'type_blood' => [ 'required' => 'It is necessary to define the hunter\'s blood type.', 'max_length' => 'The hunter\'s blood type must be a maximum of 3 characters.' ] ];
HunterController.php
public function createHunter() { try { $hunter = new HunterModel(); $data = [ 'name_hunter' => $this->request->getPost('name_hunter'), 'age_hunter' => $this->request->getPost('age_hunter'), 'height_hunter' => $this->request->getPost('height_hunter'), 'weight_hunter' => $this->request->getPost('weight_hunter'), 'type_hunter' => $this->request->getPost('type_hunter'), 'type_nen' => $this->request->getPost('type_nen'), 'type_blood' => $this->request->getPost('type_blood') ]; if ($hunter->insert($data)){ return $this->response->redirect(site_url('/read_hunters')); } else { $this->$data->listError(); } } catch (\Exception $e) { exit($e->getMessage()); } }
问题原因及修复方案
错误点分析
- 语法错误:
$this->$data->listError()写法完全错误,$data是普通数组,不是控制器的属性,框架中也不存在listError()方法。在CodeIgniter中,模型验证失败后,需调用模型实例的errors()方法获取自定义错误信息。 - 未处理错误信息:原代码仅调用了错误方法,但没有将错误信息传递给视图进行展示。
修正后的控制器代码
public function createHunter() { try { $hunter = new HunterModel(); $inputData = [ 'name_hunter' => $this->request->getPost('name_hunter'), 'age_hunter' => $this->request->getPost('age_hunter'), 'height_hunter' => $this->request->getPost('height_hunter'), 'weight_hunter' => $this->request->getPost('weight_hunter'), 'type_hunter' => $this->request->getPost('type_hunter'), 'type_nen' => $this->request->getPost('type_nen'), 'type_blood' => $this->request->getPost('type_blood') ]; if ($hunter->insert($inputData)){ return $this->response->redirect(site_url('/read_hunters')); } else { // 获取自定义验证错误信息 $errorMessages = $hunter->errors(); // 将错误信息传递到表单视图(假设视图文件为create_hunter.php) return view('create_hunter', ['errors' => $errorMessages]); } } catch (\Exception $e) { exit($e->getMessage()); } }
视图中展示错误(示例)
在表单视图create_hunter.php中,可通过以下方式遍历显示错误:
<?php if(isset($errors)): ?> <div class="alert alert-danger"> <?php foreach($errors as $error): ?> <p><?= $error ?></p> <?php endforeach; ?> </div> <?php endif; ?>
内容的提问来源于stack exchange,提问作者user19526276
相关产品推荐
相关产品推荐

