laravel - Laravel 验证:仅当另一个元素不存在时,如何将数组中的元素元素标记为必需
问题描述
我的 api 在帖子中接受一组收件人。
每个收件人都必须有电子邮件或电话,但不能同时拥有。
我试过这个
'recipients' => 'required|array|min:1',
'recipients.*.email' => 'required_without:recipients.*.phone',
'recipients.*.phone' => 'required_without:recipients.*.email',
问题是必须丢弃以下内容,但对 laravel 有效
{
recipients: [
'email': 'a'
'phone: 'b'
]
}
如果有电子邮件,则不能是电话,反之亦然。
解决方案
您可以使用required_unless
验证器。
从文档
但是你有一个更大的问题是你正在验证一个数组。因此,在数组中使用星号“*”并不是一个简单的情况,因为您需要检查每个收件人的电话/电子邮件,而不是任何收件人。
所以也许是这样的。
$rules = [
'recipients' => 'required|array|min:1'
];
for($i = 0; $i < count(request('recipients')); $i++) {
$rules['recipient.' . $i . '.email'] = 'required_unless:recipient.' . $i . '.phone';
$rules['recipient.' . $i . '.phone'] = 'required_unless:recipient.' . $i . '.email';
}
return $rules;
推荐阅读
- ios - UITableView 的第一个按钮作为搜索以及添加文本字段
- php - 我不知道如何解决这个小错误
- html - 为什么 CSS 兄弟 (~) 选择器不适用于 :checked?
- dart - 如何在 Flutter 中使用 BottomNavigationBar 构建页面
- reactjs - 怎么把material-ui文本域中的label放到右边?
- python-3.x - 在 numpy 数组中堆叠多个 RGB 图像以实现 CNN
- ruby-on-rails - Rails:为什么服务器出现致命错误?
- angular - Angular:如何使用 IonicStorageModule 中的存储?
- python - 为什么在虚拟环境中运行 Jupyter 时建议创建新的 IPython 内核?
- android - 带有图标和背景颜色的圆形按钮