javascript - Laravel 验证数组迭代
问题描述
我通过 javascript 从表单中发送了一个数组,该数组从不同的输入字段中获取值,然后将其存储在一个变量中。
<input type="hidden" name="details" id="details">
js
document.querySelectorAll('form')[1].addEventListener('submit', function(event) {
var details = [];
for (var i = 0; i < {{ $event->grocery->items()->count() }}; i++) {
details[i] = [
document.querySelectorAll('.store')[i].value,
document.querySelectorAll('.item')[i].value,
document.querySelectorAll('.quantity')[i].value,
document.querySelectorAll('.brand')[i].value,
document.querySelectorAll('.size')[i].value,
];
}
document.querySelector('#details').value = JSON.stringify(details);
});
然后在我的控制器中,我使用解码数组json_decode
$request->details = json_decode($request->details);
现在,我想验证每次迭代(只是检查它是否为空)。所以,我喜欢这样,
$request->validate([
...
'details.*.*' => 'required'
]);
但我的问题是这没有做任何事情。即使我发送了一个空迭代,它也会继续而不返回错误。
我在这里做错什么了吗?请帮我。
更新
示例 var 转储详细信息
array:3 [▼
0 => array:5 [▼
0 => "Grocery"
1 => "Grocery"
2 => "Grocery"
3 => "Grocery"
4 => "Grocery"
]
1 => array:5 [▼
0 => "Grocery"
1 => "Grocery"
2 => "Grocery"
3 => "Grocery"
4 => "Grocery"
]
2 => array:5 [▼
0 => "Grocery"
1 => "Grocery"
2 => "Grocery"
3 => "Grocery"
4 => "Grocery"
]
]
解决方案
如果你命名你的数组值会更容易
document.querySelectorAll('form')[1].addEventListener('submit', function(event) {
var details = [];
for (var i = 0; i < {{ $event->grocery->items()->count() }}; i++) {
details[i] = {
store: document.querySelectorAll('.store')[i].value,
item: document.querySelectorAll('.item')[i].value,
quantity: document.querySelectorAll('.quantity')[i].value,
brand:document.querySelectorAll('.brand')[i].value,
size: document.querySelectorAll('.size')[i].value,
};
}
document.querySelector('#details').value = JSON.stringify(details);
});
验证将如下所示:
$request->validate([
...
'details.*.store' => 'required',
'details.*.item' => 'required',
'details.*.quantity' => 'required',
'details.*.brand' => 'required',
'details.*.size' => 'required'
]);
但如果它不适合你,总有 Laravel 的自定义验证规则
编辑:
我认为问题可能在于您的数据更新:
$request->details = json_decode($request->details);
相反,您应该在验证之前修改输入并在表单请求验证之前修改输入
$request->request->set('details', json_decode($request->details));
推荐阅读
- mongodb - mongodb中的条件分组
- c# - How to open Microsoft store and direct to the app if the app is not installed c# UWP
- pandas - 在 MultiIndex - Pandas 创建的标题下方设置单元格值
- angular - 无法协商从 Angular 到 Azure SignalR(.NET CORE 主机)的握手
- angular - Angular Material 选择列表中的预选值不起作用
- caching - 底层 apache 缓存如何工作
- docker - 如何构建具有非 root 用户权限的 docker 以使用 pipenv 设置 python 应用程序?
- wso2 - WSO2 EI 发送带有附件、CC 和 BCC 收件人的电子邮件
- javascript - Vue.js:在点击时响应式更新组件
- python - 在 OCR 上,python 线程比预期慢