2017-10-20 113 views
0

我试图验证将库存加载到表中的请求。到现在为止,股价一直有一个正值,下面的验证规则工作完全按预期:Laravel 5.4 - 可以为零的必需参数的正确验证规则

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

股票被存储并可以有多个值和现在股票可以有零(0)的value,我不认为它符合'必需的'规则。

我已经改变了它使用“出席”,我想应该足够但它仍然失败,并添加“可为空”也不起作用:

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

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

+0

您是否尝试过正则表达式验证?正如'regex:[0-9] +' – Diego

回答

0

所以这个问题实际上我在使用$request->intersect(...)它把钥匙与零值(0)作为虚假的,因此从请求数据阵列中删除。

对于任何可能遇到此问题的人,这里是将零(0)值视为truthy的解决方案;空值,空字符串和false将被视为false。

Nb$params,$rules$messagesarrays。有关更多信息,请参阅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); 
0

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

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

Laravel documentation

下验证的字段必须存在于所述输入数据而不是 空。如果以下其中一个 条件成立,则该字段被视为“空”:

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

验证器肯定会失败,并且在需要或存在字段且值为0(零)时从数据数组中删除该值。 – Mike

+0

那么恐怕还有其他事情要做。验证器确实以这种方式工作。 – Propaganistas

+0

Hi @Propaganistas我找到了解决方案,并在昨天发布。尽管感谢您的帮助。 – Mike