Laravel 8编辑帖子未选新图时如何默认沿用现有图片完成更新
报错原因
当用户未上传新图片时,request('image') 返回 null,直接对 null 调用 store() 方法会触发错误。你已经将校验规则设为 nullable 仅表示允许该字段为空,不会自动处理空值场景下的后续逻辑。
修复方案
修改 update 方法逻辑,增加上传文件存在性判断:默认沿用原有帖子的图片路径,仅当用户上传了新图片时,才执行存储、替换路径的操作。
修改后的完整代码
public function update(Post $post, Request $request) { $validated = $request->validate([ 'caption' => 'required', 'url' => 'required', 'image' => ['nullable', 'image'], ]); // 默认沿用帖子原有图片路径 $imagePath = $post->image; // 仅存在有效上传文件时才执行存储逻辑 if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('uploads', 'public'); } $post->update([ 'caption' => $validated['caption'], 'url' => $validated['url'], 'image' => $imagePath, ]); return redirect('/users/' . auth()->user()->id); }
逻辑说明
- 用
$request->hasFile('image')判断是否上传了有效文件,比直接判断字段是否为空更可靠,能避免异常空值触发的错误 - 先初始化
$imagePath为当前帖子已有的图片值,无需上传时直接保留原有图片 - 上传新图片时才调用
store()方法生成新的存储路径,覆盖原有默认值
注意:请确认你的帖子编辑表单已经添加
enctype="multipart/form-data"属性,否则文件字段无法正常上传。
内容的提问来源于stack exchange,提问作者Eden Gaitor
相关产品推荐
相关产品推荐

