Laravel 8更新数据时报Call to a member function store() on null错误如何解决
报错原因
- 核心触发点:代码在
$imagePath = request('image')->store('profile', 'public');行无条件调用store()方法,当用户提交编辑表单时未上传新图片、或者表单未设置enctype="multipart/form-data"属性导致文件上传失败时,request('image')会返回null,对null调用成员方法就会抛出该错误。 - 额外逻辑缺陷:当前代码的更新操作仅传入了图片路径,前面验证通过的
title、description、url字段没有合并到更新数据中,会导致除图片外的其他字段无法正常更新。同时原代码中auth()->user->profile写法错误,缺少user后的调用括号,正确写法为auth()->user()->profile。
修复方案
- 首先确认编辑页的表单标签已添加文件上传必填属性:
<form method="POST" action="你的更新路由地址" enctype="multipart/form-data"> <!-- 其余表单字段代码 --> </form>
- 修改控制器
update方法,仅当存在上传的图片文件时执行存储逻辑,同时合并所有验证后的字段到更新数据:
public function update(User $user) { $this->authorize('update', $user->profile); $data = request()->validate([ 'title' => 'required', 'description' => 'required', 'url' => 'url', 'image' => '', ]); // 仅存在上传图片时执行处理逻辑 if (request()->hasFile('image')) { $imagePath = request('image')->store('profile', 'public'); $image = Image::make(public_path("storage/{$imagePath}"))->fit(1000, 1000); $image->save(); $data = array_merge($data, ['image' => $imagePath]); } auth()->user()->profile->update($data); return redirect("/profile/{$user->id}"); }
内容的提问来源于stack exchange,提问作者El Hussien Ramadan
相关产品推荐
相关产品推荐

