📜  在 laravel 中创建自定义规则 - PHP (1)

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

在 Laravel 中创建自定义规则 - PHP

在 Laravel 中,您可以轻松地创建自定义规则来验证您的表单输入。这篇文章将介绍如何通过编写自定义规则类来实现此目的。我们将首先学习 Laravel 内置规则的结构,然后实现我们自己的规则类。

Laravel 内置规则

Laravel 提供了一组内置规则,可用于验证表单输入。以下是一些 Laravel 提供的内置规则:

  • accepted
  • active_url
  • after:date
  • alpha
  • alpha_dash
  • alpha_num
  • array
  • before:date
  • between:min,max
  • boolean
  • confirmed
  • date
  • date_format:format
  • different:field
  • digits:value
  • digits_between:min,max
  • dimensions
  • distinct
  • email
  • exists:table,column
  • file
  • filled
  • image
  • in:foo,c,bar
  • in_array:anotherfield
  • integer
  • ip
  • ipv4
  • ipv6
  • json
  • max:value
  • mimes:foo,bar,…
  • mimetypes:text/csv
  • min:value
  • not_in:foo,bar,…
  • not_regex:pattern
  • numeric
  • present
  • regex:pattern
  • required
  • required_if:anotherfield,value,...
  • required_unless:anotherfield,value,...
  • required_with:foo,bar,…
  • required_with_all:foo,bar,…
  • required_without:foo,bar,…
  • required_without_all:foo,bar,…
  • same:field
  • size:value
  • sometimes
  • string
  • timezone
  • unique:table,column,except,idColumn
  • url
  • uuid

每个规则都有一个简短的描述和一组可选的参数。您可以在 Laravel 文档中找到更详细的文档。

创建自定义规则类

现在我们将创建自己的规则类。要创建自定义规则类,您需要创建一个 PHP 类,该类实现 Laravel 的 Illuminate\Contracts\Validation\Rule 接口。这个接口定义了 passesmessage 方法,我们需要实现这两个方法。

以下是一个示例规则类,该规则将验证输入是否为给定日期之前的日期:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class BeforeDate implements Rule
{
    protected $date;

    public function __construct($date)
    {
        $this->date = $date;
    }

    public function passes($attribute, $value)
    {
        $date = strtotime($value);
        return $date < strtotime($this->date);
    }

    public function message()
    {
        return ':attribute must be before ' . $this->date;
    }
}

在上面的代码中,我们首先定义了 BeforeDate 类,并在构造函数中接受日期参数。passes 方法将接收要验证的属性和值,并使用 strtotime 函数将时间戳转换为日期,并检查日期是否在给定日期之前。message 方法将返回验证失败时要显示的消息。

我们现在已经创建了我们的自定义规则类,现在我们可以将其用于验证表单输入。

使用自定义规则

要使用自定义规则,您需要在验证规则中添加它。在 Laravel 中,您可以将规则作为字符串传递,也可以使用数组传递多个规则:

$request->validate([
    'date' => [
        'required',
        new BeforeDate('2022-01-01'),
    ],
]);

在上面的代码中,我们将 required 规则和自定义 BeforeDate 规则传递给 date 属性验证。

结论

通过创建自己的自定义规则类,您可以扩展 Laravel 内置规则以验证您的表单输入。使用自定义规则可以使您的表单验证更加灵活,适合您的应用程序的特定需求。