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

Laravel中grade数组输入验证错误提示不显示问题求助

问题分析与解决方案

核心问题

你的grade[]输入框验证提示不显示,主要有两个原因:

  1. 错误捕获范围不匹配:当输入框为空提交时,服务器端触发的是数组元素级别的错误(grade.*),但视图只监听了整个数组字段的错误(grade),导致错误提示无法显示。
  2. 验证规则逻辑漏洞:原规则中grade => 'required|array'仅验证字段存在且为数组,但允许数组为空;而grade.* => 'integer'仅验证元素为整数,未限制元素不能为空,导致空值提交时触发的错误键与视图监听的不一致。

修复步骤

1. 修正控制器验证规则

更新验证规则,确保数组至少有一个元素,且每个元素为0-100之间的整数:

$request->validate(
    [
        'student_id'            => 'required|integer',
        'nis'                   => 'required|integer',
        'class'                 => 'required|string',
        'major'                 => 'required|not_in:0',
        'attitude_point'        => 'required|array',
        'attitude_point.*'      => 'integer',
        'competency_point'      => 'required|array',
        'competency_point.*'    => 'string',
        'grade'                 => 'required|array|min:1', // 新增min:1确保数组非空
        'grade.*'               => 'required|integer|between:0,100', // 新增required和范围限制
        'predicate'             => 'required|array',
        'predicate.*'           => 'string',
    ],
    [
        'student_id.required'   => 'The student name field is required.', 
        'grade.required'        => 'The grade field is required.',
        'grade.min'             => 'At least one grade must be provided.',
        'grade.*.required'      => 'The grade field cannot be empty.',
        'grade.*.integer'       => 'The grade must be an integer.',
        'grade.*.between'       => 'The grade must be between 0 and 100.',
    ] 
);

2. 修正视图错误显示逻辑

修改视图,同时监听整个数组和元素级别的错误,并正确显示对应提示:

<div class="col-4">
  <div class="form-group">
    <label>Nilai <span class="text-danger">*</span></label>
    <input type="number" id="grade" name="grade[]" 
           class="form-control @if($errors->has('grade') || $errors->has('grade.*')) is-invalid @endif" 
           placeholder="Masukkan nilai" required>
    @if ($errors->has('grade'))
      <div class="invalid-feedback">{{ $errors->first('grade') }}</div>
    @elseif ($errors->has('grade.*'))
      <div class="invalid-feedback">{{ $errors->first('grade.*') }}</div>
    @else
      <div class="invalid-feedback">Mohon isikan nilai</div>
    @endif
  </div>
</div>

关键说明

  • 新增grade.min:1确保数组至少有一个有效元素,避免空数组提交通过验证。
  • grade.*.required强制每个输入的分数不能为空,配合between:0,100限制分数范围,覆盖空值、非整数、超出范围等场景。
  • 视图中同时监听grade和grade.*的错误,确保所有验证场景下都能显示对应提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:22:17