在使用 Laravel 表单验证时,有的时候我们需要验证动态生成(name)的字段,本文就介绍一下 Laravel 表单验证动态生成的字段的方法。

假设有如下表单代码,其中包含包含动态名称的 input。

@foreach($norms as $norm)
    <tr>
        <td class="d-none d-sm-table-cell text-nowrap">{{ $norm->title }}</td>
        <td>{{ $norm->description }}</td>
        <td>{{ $norm->score }}</td>
        <td>
            <input type="number"
                   id="norm-{{ $norm->id }}"
                   name="norm-{{ $norm->id }}"
                   class="form-control score @if ($errors->has('norm-' . $norm->id)) border border-danger text-danger @endif"
                   step="1"
                   min="0"
                   max="{{ $norm->score }}"
                   value = "{{ old('norm-'.$norm->id) }}">
        </td>
    </tr>
@endforeach

表单验证代码:

$inputs = $this->all();
$rules = [];
foreach ($inputs as $key => $input) {
    if(str_contains($key,'norm-')){
        $rules[$key] = 'required|integer|gte:0|lte:100;
    }
}
return $rules;

说明:

通过前缀获得所有包含 norm- 字符串的动态名称 input,然后循环添加验证规则,最终返回规则数据即可。