【问题标题】:How to use a closure as a validator?如何使用闭包作为验证器?
【发布时间】:2015-11-01 13:10:47
【问题描述】:
是否可以在 Laravel 中做类似以下的事情:
public function rules()
{
return [
'sid' => function ($input) {
// some custom validation logic.
}
];
}
public function messages()
{
return [
'sid' => "Invalid SID!",
];
}
我想做一些简单的一次性验证。创建自定义验证是一种矫枉过正。
【问题讨论】:
标签:
validation
laravel
laravel-5
【解决方案1】:
这里至少有两种选择。
-
通过AppServiceProvider boot() 方法创建自定义规则:
Validator::extend('my_rule', function($attribute, $value, $parameters) {
// some custom validation logic in order to return true or false
return $value == 'my-valid-value';
});
然后,您应用以下规则:
return [
'sid' => ['my_rule'],
];
- 或扩展
ValidatorServiceProvider 类。使用这个线程一步一步解释:Custom validator in Laravel 5
【解决方案2】:
如果你使用 Laravel 5.6 或更高版本,你可以使用closures。
要在闭包范围内使用 $input,您可以使用 use 关键字。
'sid' => [ function($attribute, $value, $fail) use $input {
// your logic here
//if that fails, so
return $fail($attribute.' is invalid.');
}
]