📜  在 laravel 中规则 (1)

📅  最后修改于: 2023-12-03 14:51:00.207000             🧑  作者: Mango

在 Laravel 中规则

在 Laravel 中,规则(Rules)常用于表单验证、模型验证和请求验证等操作中,用于验证特定字段的值是否符合指定的要求。Laravel 提供了丰富的规则集合和简单的方式来定义自己的规则,让我们更容易地实现数据验证。

Laravel 的内置规则

Laravel 内置了多种规则用于验证表单、模型和请求等操作,包括但不限于以下内容:

  • accepted:接受。
  • active_url:URL 是否合法。
  • after:日期是否在指定日期之后。
  • alpha:仅包含字母字符。
  • alpha_dash:仅包含字母、数字、破折号和下划线字符。
  • alpha_num:仅包含字母和数字。
  • array:是否为数组。
  • before:日期是否在指定日期之前。
  • boolean:是否为布尔类型。
  • confirmed:和指定字段一致。
  • date:是否为有效日期。
  • date_equals:是否为指定日期。
  • date_format:是否符合指定的日期格式。
  • different:与指定字段不同。
  • digits:是否为指定长度的数字。
  • digits_between:是否为指定长度范围的数字。
  • dimensions:是否为指定尺寸的图像。
  • distinct:是否有重复值。
  • email:是否为有效的 E-mail 地址。
  • ends_with:是否以指定字符串结尾。
  • exists:是否存在特定数据库表中。
  • file:是否为上传文件类型。
  • filled:是否填写。
  • gt:是否大于指定值。
  • gte:是否大于等于指定值。
  • image:是否为图像类型。
  • in:是否包含在指定数组中。
  • in_array:是否在指定数组中存在。
  • integer:是否为整数类型。
  • ip:是否为有效 IP 地址。
  • ipv4:是否为有效 IPv4 地址。
  • ipv6:是否为有效 IPv6 地址。
  • json:是否为有效 JSON 格式。
  • lt:是否小于指定值。
  • lte:是否小于等于指定值。
  • max:是否小于等于指定最大值。
  • mimes:是否具有指定的 MIME 类型。
  • mimetypes:是否具有指定的 MIME 类型。
  • min:是否大于等于指定最小值。
  • not_in:是否不包含于指定数组中。
  • not_regex:是否不与指定模式匹配。
  • nullable:是否为空。
  • numeric:是否为数字类型。
  • password:和当前用户的密码是否相同。
  • present:是否存在于输入数据中。
  • regex:是否与指定模式匹配。
  • required:是否必填。
  • required_if:是否必填,如果指定字段等于指定值的话。
  • required_unless:是否必填,除非指定字段等于指定值的话。
  • required_with:是否必填,如果任何指定字段不为空。
  • required_with_all:是否必填,如果所有指定字段都不为空。
  • required_without:是否必填,如果任何指定字段为空。
  • required_without_all:是否必填,如果所有指定字段都为空。
  • same:是否和指定字段相同。
  • size:是否为指定大小的文件。
  • starts_with:是否以指定字符串开头。
  • string:是否为字符串类型。
  • timezone:是否为有效的时区标识符。
  • unique:是否唯一。
  • url:是否为有效 URL 地址。

示例,验证请求数据中的名称是否存在:

$validator = \Validator::make($request->all(), [
    'name' => 'required|string|max:255',
]);

以上代码将验证请求数据中的 name 字段是否存在,是否为字符串类型,且不超过 255 个字符的长度。

自定义规则

除了 Laravel 提供的内置规则外,我们也可以定义自己的规则来满足业务需求。一个自定义规则对象包含两个方法:passesmessage

passes 方法接收两个参数,第一个参数为字段的名称,第二个参数为要验证的值,如果验证成功则返回 true,否则返回 false。

message 方法返回验证失败的错误信息。

下面是一个自定义规则的示例:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return strtoupper($value) === $value;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be uppercase.';
    }
}

以上代码定义了一个名为 Uppercase 的规则,该规则将验证给定的字段是否全部为大写字母。

如果要在验证规则中使用自定义规则,可以使用 Rule 门面类的 dimension 方法来包装自定义规则,例如:

use Illuminate\Validation\Rule;
use App\Rules\Uppercase;

$validator = Validator::make($request->all(), [
    'name' => [
        'required',
        'string',
        'max:255',
        Rule::dimensions()->width(100)->height(100)->ratio(3 / 2),
        new Uppercase,
    ],
]);

以上代码将验证请求数据中的 name 字段是否存在,是否为指定长度的字符串,是否符合定义的图片尺寸,并且值全部为大写字母。

参考链接