Laravel输入数组为什么我在$ request->数量中得到null

时间:2018-03-01 11:28:42

标签: php laravel

在搜索类似问题后,我仍然没有收到错误

问题是我有一个通常有效的表单,但10%的用户有此错误

  

array_sum()期望参数1为数组,给定

为null

表格

<select name="quantity[]" class="form-control option-quantity" data-price="100">
   <option data-price="100" value="0">0</option>
   <option data-price="101" value="1" selected="selected">1</option>
   <option data-price="102" value="2">2</option>
</select>

控制器

$validator = Validator::make($request->all(), [
   'quantity.*' => 'required|integer',
]); 

if ($validator->fails()) { 
   abort(500);
}

if(count($request->quantity) == 0 || array_sum($request->quantity) < 1)){
   //message to select at least a quatity
}

他们总是提出一个数额,因为我没有限制,js避免空值或0和服务器端不允许0

所以,正如有时候发生的那样,我想知道一些探险家是否做了一些奇怪的事情,将数量[]改为数量或无效或某事,我在这里开车有点疯狂我可以&#39 ; t自己重现错误,等待错误发生在用户身上不是一个好主意(:

当然,顺便说一句,我可以添加if($request->quantity)以避免错误,但这并不能解决为什么我有时会得到一个空的问题,休息就好了。

按照dd($request->quantity);后的建议,我得到:

array:1 [
  0 => "1"
]

但同样,对我而言,它的工作效益不是10%。

3 个答案:

答案 0 :(得分:0)

您可以通过检查数量来避免此错误。它

 if($request->quantity){
  if(count($request->quantity) == 0 || array_sum($request->quantity) < 1)){
   //message to select at least a quatity
  }
}

抛出此错误是因为$request->quantity为空;

希望这有帮助

答案 1 :(得分:0)

由于您尚未标记Laravel版本,因此我假设您使用的是最新版本。

  

为什么我得到一个空

检查验证规则..

当用户使用空字符串提交数据时,Laravel使其可以为空。检查位于ConvertEmptyStringsToNull文件夹内的中间件Illuminate\Foundation\Http\Middleware

因此,如果您希望在提交用户数据时始终存在,请将其设置为必填项。

return [
    'quantity' => 'required',
    // .. other validation rules..
];

希望这会帮助你。快乐的编码。欢呼声。

答案 2 :(得分:0)

尝试从所选名称中删除“ []”,因此您将获得以下信息:

<select name="quantity" class="form-control option-quantity" data-price="100">
   <option data-price="100" value="0">0</option>
   <option data-price="101" value="1" selected="selected">1</option>
   <option data-price="102" value="2">2</option>
</select>