Laravel闭包验证中获取数组长度报错问题求助
问题解决
错误原因很明确:$fail() 方法必须接收字符串类型的错误提示信息,你直接将数组长度的数值(或当attachment字段不存在时返回的null)传入,导致Laravel的翻译组件在处理时无法生成有效的字符串,从而抛出该异常。
修正后的代码示例:
'attachment' => 'max:10', 'attachment.*' => 'max:10240|mimes:jpeg,jpg,pdf', 'deletedAttachments' => ['nullable', 'array', 'max:10', function($attribute, $value, $fail) { // 安全获取attachment数组长度,字段不存在时返回空数组 $attachmentCount = count($this->input('attachment', [])); // 根据实际校验需求编写逻辑,比如判断附件总数是否超限 if ($attachmentCount + count($value) > 10) { $fail('附件总数不能超过10个'); } // 如果仅需输出当前附件长度作为提示,也要转为字符串 // $fail('当前已上传附件数量为:' . $attachmentCount); }],
关键注意点:
- 必须给
$fail()传入明确的字符串错误提示,禁止直接传入数字或非字符串类型的值 - 用
$this->input('attachment', [])替代$this->input('attachment'),确保字段不存在时仍能拿到空数组,避免潜在的取值问题
内容的提问来源于stack exchange,提问作者Bu Saeed
相关产品推荐
相关产品推荐

