Laravel 5.5 自定义验证规则对象
发布日期:作者: Paul Redmond
Laravel 5.5 将引入对自定义验证规则对象的支持,作为使用 Validator::extend
用于自定义验证规则 的替代方案。
要定义自定义验证规则,请实现 Illuminate\Contracts\Validation\Rule
接口或使用闭包。然后在验证器中直接使用自定义规则。
自定义对象验证规则的示例可能如下所示
use Illuminate\Contracts\Validation\Rule; class CowbellValidationRule implements Rule{ public function passes($attribute, $value) { return $value > 10; } public function message() { return ':attribute needs more cowbell!'; }}
在定义了自定义规则后,您可以在控制器验证中这样使用它
public function store(){ // Validation message would be "song needs more cowbell!" $this->validate(request(), [ 'song' => [new CowbellValidationRule] ]);}
闭包形式的相同规则可能如下所示。
public function store(){ $this->validate(request(), [ 'song' => [function ($attribute, $value, $fail) { if ($value <= 10) { $fail(':attribute needs more cowbell!'); } }] ]);}
如果 song
字段为空或未出现在请求中,自定义规则示例 **将不会** 运行。如果您希望自定义验证对象即使在值为空的情况下也能运行,则需要使用 ImplicitRule
合同。
use Illuminate\Contracts\Validation\ImplicitRule; class CowbellValidationRule implements ImplicitRule{ public function passes($attribute, $value) { return $value > 10; } public function message() { return ':attribute needs more cowbell!'; }}
如果您更喜欢在类中组织自定义规则,自定义验证规则对象将成为 Validator::extend()
样式自定义规则的绝佳替代方案。此外,从验证器跳转到规则源代码可能比搜索使用 Validator::extend
定义的自定义字符串型规则更方便。
闭包样式的自定义验证规则对于简单的一次性需求很方便,可以方便地尝试自定义验证规则,而无需离开控制器。您可以使用闭包来尝试自定义规则,如果规则被证明有用,则可以将其移至对象。
查看 拉取请求 文件,以了解此功能是如何实现和测试的。
太棒了!