显示 Laravel 中输入数组的验证错误
Displaying validation errors from an input array in 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">
我正在做这样的验证:
$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();
}
问题是当我尝试检查这样的错误时它不起作用:
if( $errors->has('box-1-nickname') ) { echo ' has-error'; }
错误是由name
属性收集的,不是id
,Laravel的默认MessageBag变量是$messages
,不是[=14] =]:
if( $messages->has('box-nickname') ) { echo ' has-error'; }
http://laravel.com/docs/4.2/validation#working-with-error-messages
$errors
是正确的,但您应该检查 box-nickname
。如您所见,您将 运行 陷入由于通用名称而无法识别哪个框是什么的问题。我认为最简单的方法是给每个输入一个唯一的名称(例如 box-1
、box-2
)并在服务器端执行 for 循环以检索以 box-
开头的输入。
您可能早就找到了解决方案,但对于遇到此问题的任何其他人:
验证器使用字段数组键的数组点表示法。例如 box-nickname[0]
变成 box-nickname.0
因此 if( $messages->has('box-nickname.0') ) { echo ' has-error'; }
应该会给您想要的结果。但是,您将需要动态生成数组键,因为正如您所说,您不知道应用了多少个昵称。我在表单视图中使用它:
@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-nickname-create-form-partial.blade.php" 的局部视图或任何您想用表单字段调用它的部分视图,它可能看起来像这样:
<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
其他示例:
@error('input_array.*')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
来自 5.8^ 文档
If you are validating an array form field, you may retrieve all of the messages for each of the array elements using the * character:
foreach ($errors->get('attachments.*') as $message) {
//
}
希望对您有所帮助!
我正在向我的控制器提交一组输入,如下所示:
<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">
我正在做这样的验证:
$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();
}
问题是当我尝试检查这样的错误时它不起作用:
if( $errors->has('box-1-nickname') ) { echo ' has-error'; }
错误是由name
属性收集的,不是id
,Laravel的默认MessageBag变量是$messages
,不是[=14] =]:
if( $messages->has('box-nickname') ) { echo ' has-error'; }
http://laravel.com/docs/4.2/validation#working-with-error-messages
$errors
是正确的,但您应该检查 box-nickname
。如您所见,您将 运行 陷入由于通用名称而无法识别哪个框是什么的问题。我认为最简单的方法是给每个输入一个唯一的名称(例如 box-1
、box-2
)并在服务器端执行 for 循环以检索以 box-
开头的输入。
您可能早就找到了解决方案,但对于遇到此问题的任何其他人:
验证器使用字段数组键的数组点表示法。例如 box-nickname[0]
变成 box-nickname.0
因此 if( $messages->has('box-nickname.0') ) { echo ' has-error'; }
应该会给您想要的结果。但是,您将需要动态生成数组键,因为正如您所说,您不知道应用了多少个昵称。我在表单视图中使用它:
@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-nickname-create-form-partial.blade.php" 的局部视图或任何您想用表单字段调用它的部分视图,它可能看起来像这样:
<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
其他示例:
@error('input_array.*')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
来自 5.8^ 文档
If you are validating an array form field, you may retrieve all of the messages for each of the array elements using the * character:
foreach ($errors->get('attachments.*') as $message) {
//
}
希望对您有所帮助!