返回

如何在 Laravel 中阻止同时提交多个参数?

php

Laravel 验证:阻止同时提交多个参数

问题陈述

在 Laravel 中,required_without_all 验证器旨在确保在存在一个特定字段的情况下,另一个字段不存在。然而,对于更严格的情况,需要防止用户同时提交两个或多个特定的字段。

解决方法:自定义验证规则

为了解决此问题,我们可以创建一个自定义验证规则,检查给定字段的存在,并根据需要返回错误消息。

代码实现

自定义验证规则的示例如下:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class PreventTwoParameters implements Rule
{
    protected $parameters;

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

    public function passes($attribute, $value)
    {
        $count = 0;

        foreach ($this->parameters as $parameter) {
            if (request()->has($parameter)) {
                $count++;
            }
        }

        return $count <= 1;
    }

    public function message()
    {
        return 'You cannot submit two of the following parameters: ' . implode(', ', $this->parameters);
    }
}

用法

要使用自定义验证规则,将其添加到验证器数组中:

<?php

use App\Rules\PreventTwoParameters;

return [
    'user' => ['required', new PreventTwoParameters(['customer', 'public'])],
    'customer' => ['required', new PreventTwoParameters(['user', 'public'])],
    'public' => ['required', new PreventTwoParameters(['user', 'customer'])],
];

示例

考虑以下示例:

return [
    'user' => 'required_without_all:customer,public',
    'customer' => 'required_without_all:user,public',
    'public' => 'required_without_all:user,customer',
];

此验证器将防止同时提交 usercustomer,或 userpublic,或 customerpublic

结论

通过创建自定义验证规则,我们可以扩展 Laravel 验证器的功能,防止用户同时提交多个特定字段。这对于确保数据的完整性和有效性至关重要。

常见问题解答

  1. 自定义验证规则如何工作?
    自定义验证规则是一种验证器,它允许开发人员定义自己的验证逻辑。当验证器应用于字段时,它将执行自定义逻辑并返回错误消息(如果需要)。

  2. 何时需要自定义验证规则?
    当内置的验证器无法满足特定需求时,就需要自定义验证规则。例如,在本文中,我们需要防止同时提交多个字段,而内置的验证器无法做到这一点。

  3. 如何添加自定义验证规则?
    要添加自定义验证规则,请创建一个类并实现 Rule 接口。然后,将类添加到 App\Rules 命名空间。最后,在验证器数组中使用规则。

  4. 自定义验证规则有哪些好处?
    自定义验证规则提供了灵活性,允许开发人员根据自己的需求创建特定的验证逻辑。它们还提高了代码的可读性和可维护性。

  5. 我可以在哪里找到有关自定义验证规则的更多信息?
    有关自定义验证规则的更多信息,请参阅 Laravel 文档