You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:22:26