首页 > 解决方案 > 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"
]

标签: phplaravelvalidationlaravel-6

解决方案


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

'field' => 'array|required'


推荐阅读