Laravel数组字段验证

时间:2016-01-11 10:24:46

标签: arrays validation laravel-5.1

如何在Laravel 5.1中验证数组值?应验证数组的每个值。数组值的数量可以增加或减少。但名字会一样。我的示例输入将是,

emails[] = 'mail0@example.com',
emails[] = 'mail1@example.com',

我给出了验证规则,如

'emails' => 'required|email'

但是当我提供多个值时,它会返回电子邮件无效错误,因为电子邮件输入是数组。我该如何验证?我应该写自定义规则吗?

基于this answer,我尝试了类似的内容,

$validator->each('emails', 'required|email')

但不行。

3 个答案:

答案 0 :(得分:1)

以下是您正在寻找(希望如此)的基本示例

这是一个简单的刀片文件,只显示一个包含两个电子邮件和短错误显示的表单:

@if($errors->any())
    @foreach($errors->all() as $error)
        <p>{{ $error }}</p>
    @endforeach
@endif

<form action="{{ route('emails.store') }}" method="POST">
    {{ csrf_field() }}
    <input name='emails[]'>
    <input name="emails[]">
    <input type="submit" name="submit">
</form>

在我的控制器的商店方法中,我把:

public function store(Request $request)
{
    $validator = \Validator::make($request->all(), [
        'emails' => 'array',
        // your other rules here
    ]);

    $validator->each('emails', 'required|email');

    if($validator->fails()) {
        return back()->withErrors($validator->errors());
    }

    dd('success');
}

这是按预期工作并验证所有电子邮件[]字段

答案 1 :(得分:1)

如果您要验证数组值。
  您可以在下面的验证位置使用

    'email.*' => 'required|email'        

如果它是像

这样的对象
    {
      'email' : [
                  {
                    'email' : 'x@google.com'
                  },
                  {
                    'email' : 'y@google.com'
                  }
                 ]
    }

然后你需要使用如下,

   'email.*.email' => 'required|email'

这是验证数组元素的最佳方法。

答案 2 :(得分:0)

您可能希望从文档中尝试此操作 https://laravel.com/docs/5.2/validation#validating-arrays