在 Laravel 验证中创建自定义必需规则

Create custom required rule in Laravel validation

提问人:Jagdish Patel 提问时间:9/28/2023 更新时间:9/28/2023 访问量:43

问:

我的目标是允许用户从数据库中选择哪个字段是必填字段,哪个字段是可选字段。

我创建了自定义的必需规则,用于检查字段是否标记为 true 并且为空,然后它将无法验证。

它适用于必填字段,即标记为必填字段的字段。但是对于其他可选字段,我收到错误,例如“该字段必须是字符串”。因为它没有被设置为可为 null。如果我添加 nullable,那么我的自定义规则将被忽略。

我怎样才能实现我的目的,比如如果字段不是必需的,那么它应该将其视为可为空的。

以下是规则:

'name' => [
    new RequiredRule(),
    'string',
],

以下是 RequiredRule:


namespace App\Rules;

use Closure;
use App\Models\RuleTable;
use Illuminate\Contracts\Validation\ValidationRule;

final class RequiredRule implements ValidationRule
{
    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        $attribute = RuleTable::query()->where('field', $attribute)->first();
        
        if ($attribute->required && empty($value)) {
            $fail("The {$attribute->display_name} field is required.");
        }
    }
}
Laravel 验证

评论


答:

1赞 zlatan 9/28/2023 #1

对于可选字段,可以使用验证:sometimes

仅当字段存在于 正在验证的数据。

这意味着,如果不提交输入,则不会对其应用验证规则。你可以这样做:String

'name' => [
    'sometimes',
    new RequiredRule(),
    'string',
],

在上面的示例中,仅当该字段存在于您提交的数据中时,才会对其进行验证。name

评论

0赞 Jagdish Patel 9/29/2023
感谢您的回答,但不会解决我的问题,因为字段不是可选的。仅当用户选择它是可选的时,它才是可选的。 如果请求中不存在字段,将完全忽略我的“RequireRule”。我需要验证所有字段,无论它是否存在。sometimessometimes