Laravel动态创建的数组类型表单字段对应错误提示显示问题
问题原因
Laravel 对数组命名的表单字段,验证错误的索引规则是用点语法替代数组的方括号层级,你之前拼接错误键的格式没有补全层级间的点分隔符,所以无法匹配到对应的错误提示。同时注意 Blade 模板中 HTML 属性里的变量需要用 {{ }} 包裹输出。
修正后可正常运行的代码
@foreach ($names as $name) <div class="form-group"> <input type="text" name="name[{{ $name->id }}]['first']['value']" value=""> @if ($errors->has("name.{$name->id}.first.value")) <em class="invalid-feedback"> {{ $errors->first("name.{$name->id}.first.value") }} </em> @endif </div> <div class="form-group"> <input type="text" name="name[{{ $name->id }}]['last']['value']" value=""> @if ($errors->has("name.{$name->id}.last.value")) <em class="invalid-feedback"> {{ $errors->first("name.{$name->id}.last.value") }} </em> @endif </div> @endforeach
优化方案(Laravel 5.8及以上版本适用)
可以使用 Laravel 内置的 @error 指令简化写法,还能同时给输入框加错误状态类:
@foreach ($names as $name) <div class="form-group"> <input type="text" name="name[{{ $name->id }}]['first']['value']" value="" class="@error("name.{$name->id}.first.value") is-invalid @enderror"> @error("name.{$name->id}.first.value") <em class="invalid-feedback"> {{ $message }} </em> @enderror </div> <div class="form-group"> <input type="text" name="name[{{ $name->id }}]['last']['value']" value="" class="@error("name.{$name->id}.last.value") is-invalid @enderror"> @error("name.{$name->id}.last.value") <em class="invalid-feedback"> {{ $message }} </em> @enderror </div> @endforeach
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

