Php Laravel 5.4-所需参数可以为零的正确验证规则

Php Laravel 5.4-所需参数可以为零的正确验证规则,php,validation,laravel-5.4,Php,Validation,Laravel 5.4,我正在尝试验证将库存加载到表中的请求。到目前为止,股票始终具有正值,以下验证规则完全按照预期工作: [ "value" => "required|integer|min:0" ] 股票是存储的,可以有多个值,现在股票的值可以为零(0),我认为它不符合“必需”规则 我已将其更改为使用“present”,我认为这应该足够了,但它仍然失败,添加“nullable”也不起作用: [ "value" => "present|integer|min:0" ] 是否有验证规则来

我正在尝试验证将库存加载到表中的请求。到目前为止,股票始终具有正值,以下验证规则完全按照预期工作:

[
    "value" => "required|integer|min:0"
]
股票是存储的,可以有多个值,现在股票的
值可以为零(0),我认为它不符合“必需”规则

我已将其更改为使用“present”,我认为这应该足够了,但它仍然失败,添加“nullable”也不起作用:

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

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

您的初始验证规则只会按照需要继续工作<代码>必需
不会在
0
上引发错误:

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

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

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

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

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

注意
$params
$rules
$messages
数组
s。有关更多信息,请参阅

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);

你试过正则表达式验证吗?类似于
regex:[0-9]+
当字段是必需的或存在的且值为0(零)时,验证程序肯定会失败,并从数据数组中删除该值。那么,恐怕一定是发生了其他事情。验证器确实是这样工作的。嗨@Propaganistas,我找到了解决方案,昨天就发布了。谢谢你的帮助。