Laravel nullable验证规则失效求助:升级至5.4后字段验证异常
解决Laravel 5.4中form-data传null值触发验证异常的问题
我之前也踩过类似的坑,其实问题核心很明确:用form-data格式传参时,Postman里输入的"null"是字符串类型,而不是PHP里的真正null值,Laravel的nullable规则只识别实际的null,所以会把字符串"null"当成无效整数来验证,自然就抛出异常了。
给你两个实用的解决办法:
方法一:在Request类里预处理请求数据
Laravel的Request类自带prepareForValidation方法,能在验证流程启动前修改请求参数。你可以在对应的Request类里加上这段代码:
protected function prepareForValidation() { // 把form-data里的字符串"null"转换成真正的null $this->merge([ 'act_post_code' => $this->input('act_post_code') === 'null' ? null : $this->input('act_post_code'), ]); }
然后你的验证规则保持原样即可:
public function rules() { return [ 'act_post_code' => 'nullable|integer', ]; }
这样验证时,Laravel就能识别到真正的null值,nullable规则也就正常生效了。
方法二:调整Postman的传参方式
如果不想改动代码,也可以在Postman里调整传参逻辑:
- 需要传null时,直接把
act_post_code的值留空,然后在Request的预处理里把空字符串转成null(把上面的判断改成empty($this->input('act_post_code'))即可); - 或者改用
raw格式的JSON传参,直接写{"act_post_code": null},这种方式Laravel能直接解析出真正的null值,不需要额外处理。
另外补充一句,从Laravel 5.2升级到5.4后,框架对请求参数的解析逻辑做了优化,对参数类型的判断更严格,这也是为什么之前5.2版本可能没出现这个问题的原因之一。
内容的提问来源于stack exchange,提问作者Parampal Pooni
相关产品推荐
相关产品推荐

