【问题标题】:Laravel validate array element is required if array is present如果存在数组,则需要 Laravel 验证数组元素
【发布时间】:2019-02-23 17:04:55
【问题描述】:

Laravel 5.7。我有一个模型Foo 的表单请求验证。该模型有一个可选字段bar,它必须是一个数组。如果存在,它必须包含两个键,bingbang。但是如果数组不存在,显然这两个键不应该被验证。

这是我目前所拥有的:

return [
    'bar'      => 'bail|array|size:2',
    'bar.bing' => 'required|numeric',
    'bar.bang' => 'required|numeric',
];

当我发送带有bar 数组的请求时,这有效。但是当我发送一个没有bar 数组的请求时,我仍然会收到验证错误

bar.bing 字段是必需的

bar.bang 字段是必需的

我怎样才能使它们仅在bar 存在时才需要?

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    试试这个规则

    return [
        'bar'      => 'nullable|bail|array|size:2',
        'bar.bing' => 'required_with:bar|numeric',
        'bar.bang' => 'required_with:bar|numeric',
    ]
    

    Docs for required_with

    【讨论】:

    • 谢谢,完美运行。我编辑了您的答案以添加指向文档的链接。
    【解决方案2】:

    这是我在这种情况下倾向于做的事情

    public function rules(): array
    {
        $rules = [
            // ...
        ];
    
        if ($this->bar) {
            $rules['bar'] = 'array|size:2';
            $rules['bar.bing'] = 'required|numeric';
            $rules['bar.bang'] = 'required|numeric';
        }
    
        return $rules;
    }
    

    【讨论】:

    • 感谢您的回复。我考虑过这一点,但如果有更封装的方法,我会喜欢它。
    • 您可以尝试条件sometimes 规则,但我从未尝试过使用数组键,也没有看到针对这种情况的任何封装方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2016-06-11
    • 2020-04-30
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多