php - 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"
]
解决方案
(*)检查数组中的值,而不是实际数组。如果您添加通配符规则,您将始终获得经过验证的父键。因此,您还必须为每个字段添加一个数组检查:
'field' => 'array|required'
推荐阅读
- python - 通过关键数据使用 Python 更改 CSV 中的一行
- javascript - 替换单引号,但如果在双引号内使用 JSON.parse() 则不替换
- python - 如何嵌套响应函数调用外部的函数?
- git - 如何将特定的 Unity 包添加到 Git 版本?
- javascript - Heroku:我部署的 socket.io 应用程序的主机名和端口是什么
- r - gganimate 在 2D 密度图上设置动画线的麻烦
- node.js - 如何在模型中删除程序时自动删除与特定程序相关的所有评论
- python - pytelegrambotapi:如何检查按钮按下?
- java - 当我只有 jar 依赖项时通过 inteliij 运行项目
- solr - Solr Core 在 8.7 上不断关闭