【问题标题】:Laravel Valiadtion array must have one element with a certain valueLaravel 验证数组必须有一个具有特定值的元素
【发布时间】:2020-05-30 09:10:24
【问题描述】:

具有以下输入以进行表单请求验证的图像。

[
    'relations' =>
        [
            [
                'primary' => true,
            ],
            [
                'primary' => false,
            ],
        ],
],

是否有任何验证可以确保至少有一个关系模型的主要设置为 true?如果它只能确保一个元素是真的,那就更完美了。这个问题似乎以前就存在过。

所以如果我们只看到关系的输入,这应该会通过。

[
    'primary' => true,
],
[
    'primary' => false,
],

这应该验证失败。

[
    'primary' => false,
],
[
    'primary' => false,
],

【问题讨论】:

  • 您是在使用表单请求还是在控制器内部进行验证?
  • FormRequest,但没关系?你可以实现同样的目标
  • 我知道,只是为了回答问题。

标签: laravel laravel-6 laravel-validation


【解决方案1】:

试试inline custom rule

public function rules()
{
    return [
        'relations' => function ($attribute, $relations, $fail) {
            $hasPrimary = collect($relations)
                ->filter(function ($el) {
                    return $el['primary'];
                })
                ->isNotEmpty();

            if ( ! $hasPrimary)
            {
                $fail($attribute . ' need to have at least one element set as primary.');
            }
        },

        // the rest of your validation rules..
    ];
}

当然,您可以将其提取到 dedicated Rule object,但您明白了。

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 2019-10-10
    • 1970-01-01
    • 2022-10-14
    • 2019-09-24
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多