Laravel Validation实现条件验证时报validateOptions不存在如何解决
报错原因
Laravel 内置验证规则中不存在options规则,你想实现的「字段取值限定在指定列表」的需求,应该使用内置的in规则。
修正后的验证规则
直接把account_type规则里的options替换为in即可,其余required_if逻辑不需要改动:
'account_type' => 'required|in:PERSONAL,ORGANIZATIONAL', 'per_client_name' => 'required_if:account_type,PERSONAL|string', 'per_street' => 'required_if:account_type,PERSONAL', 'per_address' => 'required_if:account_type,PERSONAL', 'org_name' => 'required_if:account_type,ORGANIZATIONAL', 'org_type' => 'required_if:account_type,ORGANIZATIONAL', 'org_cont_name' => 'required_if:account_type,ORGANIZATIONAL'
补充说明
- 如果你的
account_type实际允许的取值是首字母大写的Personal、Organizational,需要对应调整in规则里的枚举值,大小写要和前端传入的实际值完全匹配才能通过校验。 - 如果你使用的是 Laravel 8.39 及以上版本,也可以先定义AccountType枚举类,再用
Enum规则实现校验,可读性更高,可选方案示例如下:
// 首先定义枚举类 app/Enums/AccountType.php enum AccountType: string { case PERSONAL = 'PERSONAL'; case ORGANIZATIONAL = 'ORGANIZATIONAL'; } // 验证规则对应修改为 'account_type' => ['required', new Enum(AccountType::class)],
内容的提问来源于stack exchange,提问作者Roshan Twanabasu
相关产品推荐
相关产品推荐

