自定义验证规则

如果要创建自定义验证规则,可以通过 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:+'
]);