我正在尝试使用扩展来创建自定义验证器,扩展将成为数组中对象的一部分。验证规则如下:
$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
答案 0 :(得分:0)
在浏览源代码之后,可以使用extendDependent()方法完成此操作。它没有在主文档中记录。将验证扩展代码更改为以下内容会将所有参数更改为相对密钥。
Validator::extendDependent('oddIs', function($attribute, $value, $parameters, $validator) {
$outcome = Outcome::find($value);
return $outcome->odds == array_get($validator->getData(), $parameters[0]);
});