【问题标题】:Laravel: custom array validation depends on previous selected valueLaravel:自定义数组验证取决于先前选择的值
【发布时间】:2020-07-21 23:47:20
【问题描述】:

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。因为我不希望任何人打开检查工具,所以更改值并导致应用程序出现错误或类似情况。

【问题讨论】:

  • 这听起来像您需要一个自定义验证规则。请参阅此参考:laravel.com/docs/7.x/validation#custom-validation-rules
  • 感谢@DanielPetrovaliev,但我必须告诉您,我浏览了文档并找不到解决方案。但是,我找到了解决这个问题的方法。我很快就会发布它。虽然,它有效,但我觉得这可以改进。如果有人找到解决此问题的更好方法,请发布您的答案。谢谢你:)

标签: laravel validation exists rules


【解决方案1】:

这是我找到参考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);

...

虽然,这段代码对我有用,但我觉得它不是正确的方法。这感觉像是一种解决方法,而不是正确的解决方案。如果有人找到更好的解决方案,请发布您的答案。


希望这对某人有所帮助。谢谢:)

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2021-12-11
    • 2016-10-21
    • 2020-07-22
    • 1970-01-01
    • 2018-12-29
    • 2021-07-11
    • 2020-12-13
    相关资源
    最近更新 更多