Laravel不会在空字符串上运行验证器

时间:2017-04-10 07:45:37

标签: laravel

我有自定义验证器。

Validator::extend('custom_validator', function($attribute, $value, $parameters, $validator) {
         return $value === '1';
});

然后我如何验证

$v = Validator::make(['test' => 'a'], ['test' => 'custom_validator']);
$v->errors()->all(); // returns [
     "validation.custom_validator",
   ]

但是当我传递只包含空格的字符串时

$v = Validator::make(['test' => '     '], ['test' => 'custom_validator']);
$v->errors()->all(); // returns [], so validator passed what is wrong

那么为什么验证器不会为此字符串运行我的自定义验证函数?

1 个答案:

答案 0 :(得分:0)

Validator::extendImplicit('custom_validator', function($attribute, $value, $parameters, $validator) {
    if($value === null) return true; // this line checks for 'empty' strings
    return $value === '1';
});

我必须使用extendImplicit而不是extend方法,因为extendImplicit验证所有字符串,但extend不验证空字符串(因为内部laravel运行{{1}输入数据的函数,如果string为空,则根本不执行验证器!)