📌  相关文章
📜  如何在规则验证 laravel 中检查数组中是否存在 - PHP (1)

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

如何在规则验证 Laravel 中检查数组中是否存在

在 Laravel 中,规则验证是我们经常需要用到的功能之一。当我们需要对表单进行验证时,规则验证可以帮助我们减少代码量,提高开发效率。在本文中,我们将讨论如何在规则验证中检查数组中是否存在指定的值。

准备工作

在开始之前,我们需要先安装 Laravel。假设你已经安装好了 Laravel,并且你有一张名为 users 的表格,其中包含 nameemail 字段。

编写规则验证

我们可以使用 Laravel 的 Validator 类来编写规则验证。要在规则验证中检查数组中是否存在指定的值,我们需要使用到 in 规则。in 规则可以用来检查指定值是否存在于给定的数组中。

首先,我们需要定义一个自定义验证规则。你可以在 app/Providers/AppServiceProvider.php 文件中的 boot 方法中定义这个规则。

use Illuminate\Support\Facades\Validator;

public function boot()
{
    Validator::extend('array_value_exists', function ($attribute, $value, $parameters, $validator) {
        
    });
}

在这个验证规则中,我们需要使用到 $attribute$value$parameters$validator 参数。$attribute 参数代表要验证的字段名,$value 参数代表该字段的值。$parameters 参数是一个包含其他验证规则中使用的参数的数组,我们可以使用它来传递我们自己的参数。$validator 参数是 Validator 类的实例。

接下来,我们需要在自定义规则中处理传递的参数。我们需要传递两个参数:一个是要检查的数组,另一个是要检查的值。

Validator::extend('array_value_exists', function ($attribute, $value, $parameters, $validator) {
    $array = $parameters[0];
    $searchValue = $parameters[1];
    
    return in_array($searchValue, $array);
});

在这个验证规则中,我们使用 $parameters 参数传递了要检查的数组和要检查的值。然后,我们使用 in_array 函数来检查要检查的值是否存在于数组中。

使用规则验证

完成规则验证之后,我们可以在表单验证中使用它。让我们假设我们需要检查 email 字段的值是否存在于指定的数组中。

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validatedData = $request->validate([
        'name' => 'required',
        'email' => [ 'required', 'email', 'array_value_exists:'.implode(',', $allowedEmails) ],
    ]);
    
    // Store the user...
}

在这个示例中,我们使用了 array_value_exists 规则来验证 email 字段。我们在验证规则中传递了 $allowedEmails 变量,它包含了允许的邮件地址。我们使用 implode 函数将邮件地址列表转换为逗号分隔的字符串。

总结

在本文中,我们学习了如何在规则验证 Laravel 中检查数组中是否存在指定的值。我们首先定义了一个自定义验证规则,然后在表单验证中使用它。这使得我们能够更准确地验证用户在表单中提供的数据。如果你使用 Laravel,这个功能会很有用。