如何在Laravel 5.1中验证数组值?应验证数组的每个值。数组值的数量可以增加或减少。但名字会一样。我的示例输入将是,
emails[] = 'mail0@example.com',
emails[] = 'mail1@example.com',
我给出了验证规则,如
'emails' => 'required|email'
但是当我提供多个值时,它会返回电子邮件无效错误,因为电子邮件输入是数组。我该如何验证?我应该写自定义规则吗?
基于this answer,我尝试了类似的内容,
$validator->each('emails', 'required|email')
但不行。
答案 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