Laravel执行Validator::make时抛出Connection Reset连接重置错误如何解决
问题原因
- 核心原因是使用了Laravel不存在的
double验证规则:Laravel 内置验证规则集中没有double规则,该写法属于将数据库字段类型和验证规则混淆的错误。底层解析不存在的验证规则时会触发未捕获的异常,严重时直接导致PHP进程崩溃,Web服务器随即返回Connection Reset错误。 - 调试时出现方法重复执行的现象,大概率是引用的
HasValidationRulesTrait中存在递归调用、死循环逻辑,或者本地开启的Xdebug扩展与异常捕获逻辑冲突,导致进程异常重启。
解决方案
- 替换所有验证规则中的
double为合法的数值验证规则:
如果仅要求参数为数值,使用numeric即可;如果需要限定小数位数,可使用decimal:位数规则,修改后的代码示例如下:
public static array $createValidationRules = [ 'valid_from' => 'required|date', 'valid_until' => 'required|date', 'institute' => 'required|string', 'iban' => 'required', 'sum_employer' => 'required|numeric', 'sum_employee' => 'required|numeric', ]; public static array $updateValidationRules = [ 'valid_from' => 'date', 'valid_until' => 'date', 'institute' => 'string', 'sum_employer' => 'numeric', 'sum_employee' => 'numeric', ];
- 排查
HasValidationRulesTrait的getCreateValidationRules()方法逻辑,确认没有递归调用、循环查询等会导致代码无限执行的问题。 - 若修改后仍出现异常,临时关闭本地Xdebug扩展再测试,部分旧版本Xdebug会和Laravel底层异常处理逻辑冲突,导致进程异常终止。
内容的提问来源于stack exchange,提问作者Elias。
相关产品推荐
相关产品推荐

