提问人:Jagdish Patel 提问时间:9/28/2023 更新时间:9/28/2023 访问量:43
在 Laravel 验证中创建自定义必需规则
Create custom required rule in Laravel validation
问:
我的目标是允许用户从数据库中选择哪个字段是必填字段,哪个字段是可选字段。
我创建了自定义的必需规则,用于检查字段是否标记为 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.");
}
}
}
答:
1赞
zlatan
9/28/2023
#1
对于可选字段,可以使用验证:sometimes
仅当字段存在于 正在验证的数据。
这意味着,如果不提交输入,则不会对其应用验证规则。你可以这样做:String
'name' => [
'sometimes',
new RequiredRule(),
'string',
],
在上面的示例中,仅当该字段存在于您提交的数据中时,才会对其进行验证。name
评论
0赞
Jagdish Patel
9/29/2023
感谢您的回答,但不会解决我的问题,因为字段不是可选的。仅当用户选择它是可选的时,它才是可选的。 如果请求中不存在字段,将完全忽略我的“RequireRule”。我需要验证所有字段,无论它是否存在。sometimes
sometimes
评论