Laravel阵列验证计数

时间:2019-03-03 16:13:00

标签: laravel laravel-5

在我的Laravel应用程序中,我试图验证请求中的两个数组加起来是否为一个特定的数字。

array1 => [1],
array2 => [],

'arary1' =>  ['bail', Rule::requiredIf(function () {
    return count($this->array2) <= 1;
})],
'array2' =>  ['bail', Rule::requiredIf(function () {
    return count($this->array1) <= 2;
})],

我对array1和array 2的总计数为3。所需要的是将array1的计数乘以2,然后将其添加到array2的计数中。

因此在上面的示例中,我的验证应该失败,因为(1 * 2)= 2 + 0 = 2等于3,所以不成功。

如何构造此验证?

1 个答案:

答案 0 :(得分:1)

您需要扩展规则https://laravel.com/docs/5.7/validation#using-extensions

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('array_count', function ($attribute, $value, $parameters, $validator) {
            $data = $validator->getData();
            $array1 = array_get($data, 'array1', []);
            $array2 = array_get($data, 'array2', []);
            return 3 == 2 * count($array1) + count($array2)
        });
    }
........
}

用法

$rules = [
    'arary1' => 'array_count'
    ...............
];