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

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());
    } 
}

问题原因及修复方案

错误点分析

  1. 语法错误:$this->$data->listError() 写法完全错误,$data是普通数组,不是控制器的属性,框架中也不存在listError()方法。在CodeIgniter中,模型验证失败后,需调用模型实例的errors()方法获取自定义错误信息。
  2. 未处理错误信息:原代码仅调用了错误方法,但没有将错误信息传递给视图进行展示。

修正后的控制器代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:15:29