Laravel 5.4 - 对于必需参数的正确验证规则,该参数可以为零

时间:2017-10-20 08:19:48

标签: php validation laravel-5.4

我试图验证将库存加载到表中的请求。到目前为止,库存总是具有正值,并且以下验证规则与预期完全一致:

[
    "value" => "required|integer|min:0"
]

库存已存储且可以有多个值,现在库存可以有value零(0),我不认为它适用于'所需'规则。

我已将其更改为使用' present'我认为应该足够但它仍然失败,并且添加了“可以为空的”#39;也不起作用:

[
    "value" => "present|integer|min:0"
]

是否有验证规则来指定字段必须存在但值可以为零?

2 个答案:

答案 0 :(得分:0)

您的初始验证规则只是按照需要继续工作; required不会在0上抛出错误:

[
    "value" => "required|integer|min:0"
]

来自Laravel documentation

  

验证字段必须存在于输入数据中,而不是   空。如果下列之一,则字段被视为“空”   条件是真的:

     
      
  • 该值为空。
  •   
  • 该值为空字符串。
  •   
  • 该值为空数组或空Countable对象。
  •   
  • 该值是一个没有路径的上传文件。
  •   

答案 1 :(得分:0)

所以问题实际上是我使用$request->intersect(...),因为它将值为零(0)的键视为false,因此将它们从请求数据数组中删除。

对于可能遇到此问题的任何其他人,以下是将零(0)值视为真实的解决方案; null值,空字符串和false将被视为false。

的Nb $params$rules$messagesarray。有关详细信息,请参阅https://laravel.com/docs/5.4/validation#manually-creating-validators

return \Validator::make(array_filter($request->only($params), function($param) {
    // This is needed to strip out empty values but treat zero (0) as truthy (default array_filter behaviour is
    // to treat zero (0) as false) but we want these values to be present in the validated request data array as
    // zero (0) in the context of a denomination is valid now that we will hold unactivated stock in the Vault.
    return ($param !== null && $param !== false && $param !== '');
}), $rules, $messages);