首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel中显示输入数组中的验证错误

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

Stack Overflow用户
提问于 2015-02-04 23:53:27
回答 4查看 24.6K关注 0票数 5

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

代码语言:javascript
复制
<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">

我正在做这样的验证:

代码语言:javascript
复制
$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();
}

问题是,当我试图检查这样的错误时,它不起作用:

代码语言:javascript
复制
if( $errors->has('box-1-nickname') ) { echo ' has-error'; }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-10 20:53:05

您可能早就找到了解决方案,但是对于任何偶然发现这个问题的人来说:

验证器使用字段数组键的数组点符号。例如,box-nickname[0]变成了box-nickname.0

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

代码语言:javascript
复制
@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 -paral.blde.php”的部分视图,或者使用form字段来命名它,它可能如下所示:

代码语言:javascript
复制
<div class="form-group {!! $errors->has('box-nickname.'.$n) ? ' has-error' : '' !!}">
    <input name="box-nickname[{{$n}}]" class="form-control" type="text" placeholder="Required">
</div>

希望这能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2019-12-11 06:44:49

在视图中显示输入数组错误(L5.8开始)

要获得输入数组的第一个验证错误:

代码语言:javascript
复制
{{ $errors->first('input_array.*') }}

要检查输入数组中是否存在错误,请执行以下操作:

代码语言:javascript
复制
@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

其他例子:

代码语言:javascript
复制
@error('input_array.*')
    <div class="alert alert-danger">{{ $message }}</div>
@enderror

来自5.8^文件

处理错误消息

如果正在验证数组表单字段,则可以使用*字符检索每个数组元素的所有消息:

代码语言:javascript
复制
foreach ($errors->get('attachments.*') as $message) {
    //
}

希望能帮上忙!

票数 13
EN

Stack Overflow用户

发布于 2015-02-05 18:41:52

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

代码语言:javascript
复制
if( $messages->has('box-nickname') ) { echo ' has-error'; }

http://laravel.com/docs/4.2/validation#working-with-error-messages

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28333809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档