Laravel 5.3在自定义验证规则中设置第二个属性名称

时间:2018-10-02 17:26:07

标签: laravel validation

我有以下自定义验证规则...

Validator::extend('empty_with', function ($attribute, $value, $parameters, $validator) {
   $other = array_get($validator->getData(), $parameters[0], null);
   return ($value != '' && $other != '') ? false : true;
}, "The :attribute field is not required with the :other field.");

并且正在像...一样使用它

$validator = Validator::make($request->all(), [
    'officer' => 'sometimes|integer',
    'station' => 'empty_with:officer,|integer',
]);

当前收到的错误消息是

The station field is not required with the :other field.

对比我想要的东西;

The station field is not required with the officer field.

如何在错误消息中设置第二个参数“军官”:属性是... ??

1 个答案:

答案 0 :(得分:1)

您需要添加自定义替换器,以配合自定义验证规则。请参阅“定义错误消息” here

\Validator::replacer('empty_with', function ($message, $attribute, $rule, $parameters) {
    return str_replace(':other', $parameters[0], $message);
});

此代码告诉Laravel,当empty_with规则失败时,应先通过该闭包运行消息,然后再将其传递回用户。闭包执行简单的字符串替换,并返回修改后的错误消息。

在大多数情况下,每个验证规则都有自己的消息替换规则,因为它取决于特定的属性及其顺序。尽管用第一个参数替换:other时有一些规则,但它不是自动的,并且为使用它的每个规则明确定义。值得研究Illuminate\Validation\Concerns\ReplacesAttributes特性,以了解Laravel如何处理其内置规则的替换。