Laravel 8 使用规则对象
尽管 Laravel 提供了多种多样有用的校验规则;但您亦可进行自定义。注册自定义校验规则的方法之一便是使用规则对象。您可以使用 make:rule
生成新的规则对象。接下来,让我们使用该命令生成一个校验字符串是否是大写的规则, Laravel 会将新规则置于 app/Rules
目录中:
php artisan make:rule Uppercase
当规则创建成功后,我们便可定义其行为。规则对象包含两个方法: 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.';
}
}
如果您想要从您的翻译文件中获取错误信息,您可以在您的 message
中使用 trans
助手方法:
/**
* 获取校验错误信息
*
* @return string
*/
public function message()
{
return trans('validation.uppercase');
}
一旦定义了规则,您便可以通过将规则的实例化与其他校验规则一起传递给验证器:
use App\Rules\Uppercase;
$request->validate([
'name' => ['required', 'string', new Uppercase],
]);