Laravel验证:仅两字段都提供时校验相等性的问题
Laravel表单验证:仅当两字段都存在时校验值相等
你的问题出在sometimes规则仅控制当前字段的规则是否生效,但same规则本身要求被对比的字段必须存在且值相等。当你只传其中一个字段时,same规则会因为对比字段不存在而触发错误,这不符合你的需求。
解决方案一:使用条件验证(推荐)
通过sometimes的闭包形式,仅当两个字段都存在时才应用same校验规则:
$validator = Validator::make($inputFields, [ 'brandIdOnline' => 'uuid|sometimes', 'brandIdOffline' => 'uuid|sometimes', ]); // 当两个字段同时存在时,校验值相等 $validator->sometimes('brandIdOnline', 'same:brandIdOffline', function ($input) { return isset($input['brandIdOnline']) && isset($input['brandIdOffline']); }); $validator->sometimes('brandIdOffline', 'same:brandIdOnline', function ($input) { return isset($input['brandIdOnline']) && isset($input['brandIdOffline']); });
解决方案二:调整规则组合
利用required_with和same的组合,确保只有当两个字段同时存在时才触发相等校验:
$validator = Validator::make($inputFields, [ 'brandIdOnline' => 'uuid|sometimes|required_with:brandIdOffline|same:brandIdOffline', 'brandIdOffline' => 'uuid|sometimes|required_with:brandIdOnline|same:brandIdOnline', ]);
这里required_with的作用是:当另一个字段存在时,当前字段必须存在(已满足,因为两个都传了),此时same规则会校验值是否相等;如果只传其中一个字段,required_with不生效,same规则也不会触发校验。
内容的提问来源于stack exchange,提问作者Fabrice Lefloch
相关产品推荐
相关产品推荐

