在我的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,所以不成功。
如何构造此验证?
答案 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'
...............
];