我有一个奇怪的问题,我不太确定为什么会发生,或者我只是想念一些东西。
我在输入的“邮政编码”字段上有多个验证规则,就像这样
'postcode' => [
'required',
'min:5',
'max:8',
'regex:/^[a-z]/i'
],
我还为类似规则写了自定义消息
return [
'postcode.min' => 'The postcode must be at least 5 characters',
'postcode.regex' => 'Sorry, the postcode must start with a letter',
];
我所有的错误都这样循环显示
<div class="error-block {{ (count($errors) > 0) ? '' : 'hide' }}">
<div class="col-12">
<ul>
@if(count($errors) > 0)
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
@endif
</ul>
</div>
</div>
但是当两个邮政编码规则都被击中时(例如输入'123'),它会将两个错误都推到同一行,但是所有其他错误都可以正确显示,就像这样
- 邮政编码必须至少包含5个字符,对不起,邮政编码必须以字母开头。
- 用户名字段为必填项。
- 地址行1字段为必填字段。
为什么laravel将min和regex规则消息推送到同一行?
答案 0 :(得分:1)
As described in the docs,验证规则应表示为字符串,单个输入的不同规则用管道|
分隔。要验证的输入集应该是一个数组,而不是规则本身。
对于您的情况,对于postcode
输入:
'postcode' => 'required|min:5|max:8|regex:/^[a-z]/i',
答案 1 :(得分:0)
这意味着您的$error
是一个数组。如果要将所有错误都列为新行,请检查错误是否也是数组还是不是数组。
@if(count($errors) > 0)
@foreach($errors->all() as $error)
@if(is_string($error))
<li>{{$error}}</li>
@else
@foreach( $error as $newBreakdown)
<li>{{$newBreakdown}}</li>
@endforeach
@endif
@endforeach
@endif