Laravel请求中确保字段必传非空的最优验证方式咨询
关于Laravel请求验证:无需冗余的
required|present|filled组合 嘿,我完全懂你这种想搞清楚验证规则、避免冗余写法的心情!先把这三个规则的核心区别拆解清楚,你就知道为啥当前写法确实没必要了:
present规则:只要求字段出现在请求数据里,哪怕值是null、空字符串""或者空数组都算通过,它根本不关心内容是否有效filled规则:要求字段必须存在,并且值不能是空的(空字符串、null、空集合这些都不允许),但它本身不强制字段必须存在——如果字段完全没传,filled不会报错required规则:这才是你真正需要的!Laravel的required规则已经同时包含了present和filled的逻辑:它会验证字段必须存在于请求中,并且值非空(空的定义和filled一致:null、空字符串、空数组/集合都算空)
所以你现在写的:
$request->validate([ "name" => "required|present|filled", "phone" => "required|present|filled", "message" => "required|present|filled", ]);
完全是冗余的,只需要保留required就足够实现你「字段始终存在且值非空」的需求,简化后是:
$request->validate([ "name" => "required", "phone" => "required", "message" => "required", ]);
举个实际测试场景帮你确认:
- 如果请求里完全没传
name字段:required会报错(符合你要「始终存在」的要求) - 如果请求传了
name=""(空字符串):required会报错(符合你要「值非空」的要求) - 如果请求传了
name="张三":验证通过
如果以后有特殊需求,比如允许字段存在但可以为空(比如可选的备注字段),那你可以单独用present;但如果是必须存在且有内容,required一步到位就够了。
内容的提问来源于stack exchange,提问作者Damilola Olowookere
相关产品推荐
相关产品推荐

