Laravel使用or运算符时出现Call to a member function extension() on null错误
Laravel单/多文件上传更新场景的错误修复
问题根源
你把判断条件改成or后,只要sampul或buku任意一个文件存在就会进入上传逻辑,但代码里直接对两个文件执行extension()和move()操作——没上传的那个文件对象是null,调用方法自然会触发Call to a member function extension() on null错误。
修正方案
不要把两个文件的判断绑在一起,而是分别检查每个文件是否存在,单独处理上传逻辑,同时把基础字段和文件字段分开处理,避免冗余代码:
// 先初始化基础更新数据 $data = [ 'nama' => Request()->nama, 'slug' => Request()->slug, 'created_at' => Request()->created_at ]; // 单独处理sampul文件上传 if (Request()->hasFile('sampul')) { $file = Request()->sampul; $fileName = Request()->slug . '.' . $file->extension(); $file->move(public_path('file_buku'), $fileName); $data['sampul'] = $fileName; } // 单独处理buku文件上传 if (Request()->hasFile('buku')) { $file1 = Request()->buku; $fileName1 = Request()->nama . '.' . $file1->extension(); $file1->move(public_path('file_buku'), $fileName1); $data['buku'] = $fileName1; } // 统一执行更新 $this->BukuModel->editData($id_buku, $data);
说明
- 用
hasFile()方法判断文件是否存在,这是Laravel推荐的文件存在检测方式,比直接判断<>更可靠 - 基础数据和文件上传逻辑分离,不管有没有文件上传,基础字段都会更新;有哪个文件就处理哪个,不会触发null错误
- 去掉了冗余的if-else块,代码更简洁易维护
内容的提问来源于stack exchange,提问作者Irfan Chaniago
相关产品推荐
相关产品推荐

