📌  相关文章
📜  自定义规则 laravel 验证 - PHP (1)

📅  最后修改于: 2023-12-03 15:11:47.751000             🧑  作者: Mango

自定义规则 Laravel 验证

在 Laravel 中,验证是一个非常重要的特性。通过验证,我们可以确保从用户那里接收到的数据是正确,有效的。Laravel 内置了许多验证规则,例如required、email、numeric等,但是有时候我们需要自定义一些验证规则,以适应我们的具体需求。

在本文中,我们将介绍如何创建自定义验证规则,我们将通过一个简单的例子来演示。我们将创建一个“域名必须以.com结尾”的验证规则。

创建自定义规则

要创建自定义规则,我们首先需要创建一个验证器类。 该类应继承Illuminate\Validation\Validator类并实现validate方法。该validate方法将接收$attribute$value$parameters这三个参数,其中:

  • $attribute表示要验证的属性名称。
  • $value表示要验证的属性值。
  • $parameters表示validation规则可能使用的其他参数(不包括属性名称和值)。

以下是我们创建的自定义验证规则类:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class DomainName implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return preg_match('/\.com$/', $value);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The domain must end with .com.';
    }
}

在上面的代码中,我们创建了一个名为DomainName的验证类,并实现了passesmessage方法。 passes方法确定是否通过验证,message方法返回验证失败时的错误消息。

passes方法中,我们使用正则表达式来检查域名是否以.com结尾。 如果是,则返回true;否则返回false

在控制器中使用自定义验证规则

创建自定义规则完成之后,我们需要在控制器中使用它。下面是一个使用自定义规则的简单示例:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Rules\DomainName;

class DomainController extends Controller
{
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'domain' => ['required', new DomainName],
        ]);

        // 如果验证通过,执行其他操作...
    }
}

在上面的代码中,我们在需要验证的字段domain上应用了自定义规则new DomainName()。在这个例子中,我们将视与域名有关的任何数据作为domain参数传递。

总结

本文介绍了如何在 Laravel 中创建自定义验证规则。我们的示例涵盖了最常见的一些方法,但是Laravel还有许多其他方法,您可以通过查看Laravel文档或使用Laravel社区中其他人的合法做法来深入了解这个功能。 确保您的应用程序始终遵循最佳实践,验证是一个非常重要的事情。