CodeIgniter 4多文件上传未选择文件时判断逻辑失效的解决方案问询
多文件上传空选择判断失效解决方案
问题根因
多文件上传表单提交时,即使未选择任何文件,请求中也会携带car_gallery字段,绝大多数PHP框架的getFileMultiple方法接收到该字段后会返回空数组。而空数组在PHP的布尔判断中属于真值,所以你原来的判断条件会始终成立。
单文件场景下getFile方法未接收到文件时会返回null,null属于假值,所以判断逻辑正常。
修复方案
你需要先获取多文件列表,过滤无效文件后再判断是否存在有效上传文件,代码示例如下:
// 获取多文件列表 $files = $this->request->getFileMultiple('car_gallery'); // 过滤无效文件(包含未选择文件时的空实例、上传失败的文件) $validUploads = array_filter($files, function($file) { // 调用框架内置的文件有效性判断方法,不同框架方法名可能略有差异,常见为isValid() return $file->isValid(); }); if (empty($validUploads)) { // 无有效上传文件,返回错误提示 return $this->fail('请先选择要上传的文件'); } // 后续正常执行文件上传逻辑
可选优化(前端辅助校验)
可以给文件上传元素增加required属性,在前端层面先拦截未选择文件的提交请求,减少后端无效请求:
<input type="file" name="car_gallery[]" multiple required />
注意:前端校验仅为优化手段,后端校验不可省略。
内容的提问来源于stack exchange,提问作者Muhammad Ahmed
相关产品推荐
相关产品推荐

