自定义验证规则
如果要创建自定义验证规则,可以通过 Validator 外观在服务提供者的 boot
方法中执行此操作。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Validator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) {
return \Illuminate\Support\Str::startsWith($value, $parameters[0]);
});
Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) {
return str_replace(':needle', $parameters[0], $message);
});
}
}
extend
方法接受一个字符串,该字符串将是规则的名称和一个函数,该函数又将传递属性的名称,要验证的值,规则参数的数组和验证器实例,并且应返回是否验证通过。在这个例子中,我们检查值字符串是否以给定的子字符串开头。
此自定义规则的错误消息可以像往常一样在/resources/lang/[lang]/validation.php
文件中设置,并且可以包含占位符,例如,参数值:
'starts_with' => 'The :attribute must start with :needle.'
replacer
方法接受一个字符串,该字符串是规则的名称和一个函数,该函数又将传递原始消息(在替换之前),属性的名称,规则的名称以及规则参数的数组,并应在根据需要替换占位符后返回消息。
使用此规则与任何其他规则:
$this->validate($request, [
'phone_number' => 'required|starts_with:+'
]);