laravel - Laravel:自定义数组验证取决于先前选择的值
问题描述
Laravel 版本:7.x
我已经用硬编码有效device_company_id
(与所选设备相关联)测试了代码,它工作正常。
表
device_companies
|- id
|- company_id
|- title
|- ...
devices
|- id
|- device_company_id
|- ...
请求数据
Array
(
...
[devices] => Array
(
[0] => Array
(
[device_company_id] => 1
[device_id] => 2
[device_inventory_id] => null
[amount] =>
[refundable] =>
[description] =>
)
)
)
规则:
...
$rules = array_merge($rules, [
'devices' => [
'required',
'array'
],
'devices.*.device_company_id' => [
'required',
'integer',
'exists:device_companies,id,company_id,' . auth()->user()->id
],
'devices.*.device_id' => [
'required',
'integer',
'exists:devices,id,device_company_id,devices.*.device_company_id'
],
]);
...
我需要验证器的自定义验证规则exists
来验证是否device
实际上属于所选内容device_company
。因为我不希望任何人打开检查工具,所以更改值并导致应用程序出现错误或类似情况。
解决方案
这是我找到参考的链接https://ericlbarnes.com/2015/04/04/laravel-array-validation/
我的代码:
...
$rules = [
...other rules
];
$newRules = [
'devices' => [
'required',
'array'
],
'devices.*.device_company_id' => [
'required',
'integer',
'exists:device_companies,id,company_id,' . auth()->user()->id
],
];
foreach($data['devices'] as $key => $array)
{
$newRules["devices.{$key}.device_id"] = [
'required',
'integer',
"exists:devices,id,device_company_id,{$array["device_company_id"]}",
];
}
$rules = array_merge($rules, $newRules);
...
虽然,这段代码对我有用,但我觉得它不是正确的方法。这感觉像是一种解决方法,而不是正确的解决方案。如果有人找到更好的解决方案,请发布您的答案。
希望这对某人有帮助。谢谢 :)
推荐阅读
- xslt - 使用参数作为 XSL 选择语句的参数
- python - 使用 joblib.parallel 更新列表
- python - 使用 ChromeDriverManager (Python) 从网页中提取文本
- node.js - 直接从谷歌存储读取 JSON 文件(使用 Cloud Functions)
- python - 为什么 sqlite(只读)可以在本地 Docker 中运行,但不能在 Google Cloud Run 中运行?
- java - Spring boot 2.4.5 Reflection.getCallerClass 不支持
- opengl - 了解何时调用 glBindBufferBase
- core-data - CoreData 的程序化导航奇怪行为
- sql - 按 n 组记录将行转换为逗号分隔的字符串
- ffmpeg - ffmpeg覆盖带有音频过滤器showcqt