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