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

Laravel中如何给数量不固定的所有请求参数统一应用required和string验证规则

Laravel 动态请求参数验证解决方案

错误原因分析

你之前的写法不生效是因为将整个请求参数数组$req直接作为验证规则的键,Validator 无法识别数组类型的规则键名,自然不会执行对应的验证逻辑。

方案1:修改前端字段为数组格式(最推荐)

这是Laravel官方推荐的动态字段处理方式,验证逻辑更简洁:

前端代码调整(顺便修复原有语法错误)

@foreach ($questions as $index => $question)
<div class="col-md-12">
  <div class="form-group row">
     <div class="col-md-4 mt-2">
         <label for="form-control-label" class="d-flex justify-content-end"> 
           <b>{{$question->description }}</b></label>
     </div>
            <div class="col-md-3">
                <input type="text" name="sectionTime[]" class="form-control">
                <div class="text-center"> 
                    {!! $errors->first('sectionTime.'.$index, '<strong class="text-danger">:message</strong>') !!}
                </div>
            </div>
      </div>
</div>
@endforeach

后端验证代码

$validator = Validator::make($request->all(), [
    'sectionTime' => ['required', 'array'],
    'sectionTime.*' => ['required', 'string']
]);

这种写法会自动验证sectionTime数组下的所有元素,不管数量多少都能完全覆盖。

方案2:不修改前端,动态生成验证规则

如果不想改动前端原有命名逻辑,可以先过滤出所有以sectionTime开头的请求字段,再生成对应的验证规则:

use Illuminate\Support\Str;

// 过滤所有符合命名规则的字段
$fields = collect($request->keys())->filter(function ($key) {
    return Str::startsWith($key, 'sectionTime');
})->toArray();

// 动态生成规则数组
$rules = [];
foreach ($fields as $field) {
    $rules[$field] = ['required', 'string'];
}

$validator = Validator::make($request->all(), $rules);

提示:Laravel 8.0及以上版本可以直接用PHP原生的str_starts_with方法替换Str::startsWith,不需要额外引入Str门面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:03