Php 在Laravel中显示输入数组中的验证错误

Php 在Laravel中显示输入数组中的验证错误,php,validation,laravel,Php,Validation,Laravel,我正在向我的控制器提交一系列输入,如下所示: <input id="box-1-nickname" name="box-nickname[]" class="form-control" type="text" placeholder="Required"> <input id="box-2-nickname" name="box-nickname[]" class="form-control" type="text" placeholder="Required"> 问题

我正在向我的控制器提交一系列输入,如下所示:

<input id="box-1-nickname" name="box-nickname[]" class="form-control" type="text" placeholder="Required">
<input id="box-2-nickname" name="box-nickname[]" class="form-control" type="text" placeholder="Required">
问题是,当我尝试检查这样的错误时,它不起作用:

if( $errors->has('box-1-nickname') ) { echo ' has-error'; }

错误由
name
属性收集,而不是
id
,并且Laravel的默认MessageBag变量是
$messages
,而不是
$errors

if( $messages->has('box-nickname') ) { echo ' has-error'; }

$errors
是正确的,但是您应该检查
框昵称
。正如您所见,由于通用名称,您将遇到无法识别哪个框是什么的问题。我认为给每个输入一个唯一的名称(例如,
box-1
box-2
)并在服务器端执行for循环以检索以
box-

开头的输入的最简单方法可能早就找到了一个解决方案,但对于任何偶然发现这个问题的人来说:

验证程序使用字段数组键的数组点表示法。例如,
box昵称[0]
变为
box昵称。0

因此,
if($messages->has('box-nickname.0'){echo'has error';}
应该会给出您想要的结果。但是,您需要动态生成数组密钥,因为正如您所说的,您不知道应用了多少个box昵称。我在表单视图中使用此选项:

@if(!is_null(Input::old('box-nickname')))
    @foreach(Input::old('box-nickname') as $n => $box-nickname)
        @include('box-nickname-create-form-partial')
    @endforeach
@endif
然后创建一个名为“box昵称create form partial.blade.php”的局部视图,或使用表单字段调用它的任何内容,它可能如下所示:

$validator = Validator::make(Input::all(), array(
        'supplies-count' => 'required|in:0,1,2,3,4',
    ));

$arrayValidator = Validator::make(Input::all(), []);

$arrayValidator->each('box-nickname', ['required|min:1|max:60']);

if( $validator->fails() || $arrayValidator->fails() ) {
    return Redirect::route('route-2')
           ->withErrors($arrayValidator)
           ->withInput();
}
<div class="form-group {!! $errors->has('box-nickname.'.$n) ? ' has-error' : '' !!}">
    <input name="box-nickname[{{$n}}]" class="form-control" type="text" placeholder="Required">
</div>

我希望这会有所帮助。

在视图中显示输入数组错误(L5.8以后) 要获取输入数组的第一个验证错误,请执行以下操作:

{{ $errors->first('input_array.*') }}
@if($errors->has('input_array.*'))
    <h1>There is an error in your input array</h1>
    <ul>
       @foreach($errors->get('input_array.*') as $errors)
           @foreach($errors as $error)
               <li>{{ $error }}</li>
           @endforeach
       @endforeach
    </ul>
@endif
要检查输入数组中是否存在错误,请执行以下操作:

{{ $errors->first('input_array.*') }}
@if($errors->has('input_array.*'))
    <h1>There is an error in your input array</h1>
    <ul>
       @foreach($errors->get('input_array.*') as $errors)
           @foreach($errors as $error)
               <li>{{ $error }}</li>
           @endforeach
       @endforeach
    </ul>
@endif

希望有帮助

当您
dd($errors->all())
时会发生什么?另外,您的$arrayValidator有什么意义?@Victor如果我添加两个没有
box昵称的
box
并提交,我会从
dd($errors->all())获得这个结果。
看起来您想添加一个类,但这会很困难,因为您要将数组作为输入名传递。您可能必须重命名您的输入。@DavidGuyen更正,我正在传递一个数组,因为可以在前端动态添加和删除
box
输入,所以我不知道可以提交多少。可以改为
“box-昵称[]”
,我一点也不知道。我试过box
box昵称
box昵称[]
,但运气不好。@Josh我刚刚想到了这一点-尝试
$messages
而不是
$errors
$messages
未定义