自定义验证规则

最后更新于:2022-04-01 15:10:53

注册自定义验证规则 Laravel 提供了各种有用的验证规则,但是,您可能希望可以设定自定义验证规则。注册生成自定义的验证规则的方法之一就是使用 ``Validator::extend`` 方法: ~~~ Validator::extend('foo', function($attribute, $value, $parameters) { return $value == 'foo'; }); ~~~ 自定义验证器闭包接收三个参数:要被验证的 $attribute(属性) 的名称,属性的值 $value,传递至验证规则的 $parameters 数组。 您同样可以传递一个类和方法到 extend 方法中,取代原本的闭包: ~~~ Validator::extend('foo', 'FooValidator@validate'); ~~~ > 注意,您同时需要为您的自定义规则制订一个错误信息。您可以使用行内自定义信息数组或是在认证语言文件里新增。 > 扩展 Validator 类 除了使用闭包回调来扩展 Validator 外,您一样可以直接扩展 Validator 类。您可以写一个扩展自 `Illuminate\Validation\Validator` 的验证器类。您也可以增加验证方法到以 `validate `为开头的类中: ~~~ <?php class CustomValidator extends Illuminate\Validation\Validator { public function validateFoo($attribute, $value, $parameters) { return $value == 'foo'; } } ~~~ 拓展自定义验证器解析器 接下来,您需要注册您自定义验证器扩展: ~~~ Validator::resolver(function($translator, $data, $rules, $messages) { return new CustomValidator($translator, $data, $rules, $messages); }); ~~~ 当创建自定义验证规则时,您可能有时需要为错误信息定义自定义的占位符。您可以如上所述创建一个自定义的验证器,然后增加 replaceXXX 函数进验证器中。 ~~~ protected function replaceFoo($message, $attribute, $rule, $parameters) { return str_replace(':foo', $parameters[0], $message); } ~~~ 如果您想要增加一个自定义信息 "replacer" 但不扩展 `Validator `类,您可以使用 `Validator::replacer` 方法: ~~~ Validator::replacer('rule', function($message, $attribute, $rule, $parameters) { // }); ~~~
';