第一种:利用闭包方法(开发中最常用)
如果你在应用程序中只需要使用一次自定义规则的功能,则可以使用闭包而不是规则对象。闭包接收属性的名称,属性的值如果验证失败则应该使用回调中的 $fail:
$validator = Validator::make($request->all(), [ 'title' => [ 'required', 'max:255', function ($attribute, $value, $fail) { if ($value === 'foo') { //验证规则 $fail($attribute.' is invalid.'); //验证失败提示信息 } }, ], ]);
第二种:使用规则对象
(1)使用 Artisan 命令 make:rule 来生成新的规则对象。接下来,让我们用这个命令生成一个验证字符串是大写的规则。Laravel 会将新的规则存放在 app/Rules 目录中:
php artisan make:rule Uppercase
(2)一旦创建了规则,我们就可以定义它的行为。规则对象包含两个方法: passes 和 message。passes 方法接收属性值和名称,并根据属性值是否符合规则而返回 true 或 false。 message 方法应返回验证失败时应使用的验证错误消息:
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class Uppercase implements Rule { /** * 判断验证规则是否通过。 * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return strtoupper($value) === $value; } /** * 获取验证错误消息。 * * @return string */ public function message() { return 'The :attribute must be uppercase.'; } }
一旦规则对象被定义好后,你可以通过将规则对象的实例和其他验证规则一起来传递给验证器:
use App\Rules\Uppercase; $request->validate([ 'name' => ['required', 'string', new Uppercase], ]);