Laravel数组参数验证规则失效,数据仍被更新问题求助
解决Laravel数组参数验证无效的问题
嘿,我一眼就看出问题所在啦——你现在的代码只是创建了验证器实例,但完全没有检查验证是否通过,所以不管参数合不合法,都会直接执行更新逻辑!
问题根源
Validator::make()方法不管验证规则是否满足,都会返回一个Validator对象,所以你的if判断永远为true,验证规则相当于被直接跳过了。
正确的写法
这里给你两种可靠的实现方式:
方式一:用fails()检查验证结果
public function updateCompany(array $params): bool { $validator = Validator::make($params,[ 'name'=> 'required|min:3|unique:company', 'email'=> 'required|min:4|unique:company|email' ]); // 如果验证失败,返回false(也可以在这里处理错误信息) if ($validator->fails()) { // 可选:获取错误信息,比如 $errors = $validator->errors(); return false; } return $this->update($params); }
方式二:用validate()抛出异常处理
如果希望验证失败时直接抛出异常(和请求验证的行为一致),可以用这种方式:
use Illuminate\Validation\ValidationException; public function updateCompany(array $params): bool { try { // 验证不通过会自动抛出ValidationException Validator::make($params,[ 'name'=> 'required|min:3|unique:company', 'email'=> 'required|min:4|unique:company|email' ])->validate(); return $this->update($params); } catch (ValidationException $e) { // 捕获异常,根据业务需求处理(比如记录日志、返回错误) return false; } }
额外提示(更新场景必备)
因为这是更新操作,你的unique规则会把当前公司的名称/邮箱也判定为重复,导致编辑自己的信息时验证失败。建议修改规则,排除当前记录:
use Illuminate\Validation\Rule; // 假设$companyId是当前要更新的公司ID 'name' => [ 'required', 'min:3', Rule::unique('company')->ignore($companyId), ], 'email' => [ 'required', 'min:4', 'email', Rule::unique('company')->ignore($companyId), ]
内容的提问来源于stack exchange,提问作者amr degheidy
相关产品推荐
相关产品推荐

