如何使laravel自定义验证器比较两个数组值?

时间:2018-03-27 14:30:15

标签: php laravel validation

我正在尝试使用扩展来创建自定义验证器,扩展将成为数组中对象的一部分。验证规则如下:

$this->validate($request, [
    '*.odds' => 'required',
    '*.outcome_id' => 'required|oddIs:*.odds'
]);

因此,该规则将采用结果id的值,并将其与赔率属性与输入中的赔率进行比较。

Validator::extend('oddIs', function($attribute, $value, $parameters, $validator) {
    $outcome = Outcome::find($value);

    return $outcome->odds == array_get($validator->getData(), $parameters[0]);
});

正如你所看到的,我正试图让它与astrike一起工作。但我找不到解析属性名称并生成具有相对索引的键的方法。

现在简而言之,我正在寻找的解决方案是验证比较字段将嵌套在数组中的两个字段。

仅供参考:验证数据将以JSON格式发布。

类似的问题可能适用于旧版本的laravel: https://laravel.io/forum/11-09-2014-create-custom-validation-rule-which-takes-two-fields-as-arguments

1 个答案:

答案 0 :(得分:0)

在浏览源代码之后,可以使用extendDependent()方法完成此操作。它没有在主文档中记录。将验证扩展代码更改为以下内容会将所有参数更改为相对密钥。

Validator::extendDependent('oddIs', function($attribute, $value, $parameters, $validator) {
    $outcome = Outcome::find($value);

    return $outcome->odds == array_get($validator->getData(), $parameters[0]);
});