Laravel 6 表单数组验证



我有一个表单,用户可以在其中添加任意数量的联系人。但是我被困在验证上。我使用旧的方法来验证表单,使用$request->validate方法。

我的表格(其中相关的部分(:

<div class="row">
<div class="col">
{!! Form::text('contact_name[]', __('site.contact.name'))->placeholder(__('site.contact.name'))->help('<a href="#add-contact" id="add-contact">+ ' . __('site.contact.add_person') . '</a>') !!}
</div>
<div class="col">
{!! Form::text('contact_email[]', __('site.contact.email'))->placeholder(__('site.contact.email')) !!}
</div>
<div class="col">
{!! Form::text('contact_phone[]', __('site.contact.phone'))->placeholder(__('site.contact.phone')) !!}
</div>
</div>

我的验证是在 CRUD 存储方法中:

$request->validate([
'contact_name.*' => 'required|max:255',
'contact_email.*' => 'required|email|max:255',
'contact_phone.*' => 'required|max:255',
]);

这总是会导致通过,而输入中没有任何内容。 当我尝试以下操作时;它总是失败。

$request->validate([
'contact_name[]' => 'required|max:255',
'contact_email[]' => 'required|email|max:255',
'contact_phone[]' => 'required|max:255',
]);

根据文档,通配符方式是它应该的方式。关于如何使其工作的任何想法?

亲切问候 尼尔斯

--编辑 1 --

我的表单请求数据如下所示(仅包含相关变量(

"_token" => "IbYI2FYivl30YJfw8hBHti9bsaBUdkG2T76HZOIN"
"contact_name" => array:1 [▼
0 => "abc"
]
"contact_email" => array:1 [▼
0 => "abc"
]
"contact_phone" => array:1 [▼
0 => "abc"
]

像这样更改验证

$request->validate([
'contact_name'   => "required|array",
'contact_name.*' => 'required|max:255',
'contact_email'   => "required|array",
'contact_email.*' => 'required|email|max:255',
'contact_phone'   => "required|array",
'contact_phone.*' => 'required|max:255',
]);

在上面的验证中:

"contact_name"必须是数组。 "contact_name"数组中的值必须是必需的,长度至少为 255 个字符。

$request->validate([
'*.contact_name' => 'required|max:255',
'*.contact_email' => 'required|email|max:255',
'*.contact_phone' => 'required|max:255',
]);

(*(检查数组中的值,而不是实际数组。如果添加通配符规则,你将获得始终验证的父键。因此,您还必须为每个字段添加数组检查:

'field' => 'array|required'

最新更新