当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 laravel 8
Posted
技术标签:
【中文标题】当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 laravel 8【英文标题】:How to by default update a post with the current image when an image has not been chosen in edit form. I am using laravel 8 【发布时间】:2021-06-12 03:21:10 【问题描述】:当编辑表单中未选择图像文件时,我希望能够使用当前图像更新帖子。
但是,当我尝试在编辑表单中仅保存对帖子标题或网址的更改时,我收到错误消息,因为我也没有选择图像文件。
我不断收到的错误是:在 null 上调用成员函数 store()
...那个错误是指我的 PostsController 的更新方法中的这一行:
$imagePath = request('image')->store('uploads', 'public');
这是我的 PostsController 中的完整更新方法:
public function update(Post $post, Request $request)
$data = request()->validate([
'caption' => 'required',
'url' => 'required',
'image' => ['nullable', 'image'],
]);
$imagePath = request('image')->store('uploads', 'public');
$post->update([
'caption' => $data['caption'],
'url' => $data['url'],
'image' => $imagePath,
]);
return redirect('/users/' . auth()->user()->id);
另外,一个简短的说明: 图像在 create 方法中是必需的。但是,我在 update 方法中使它可以为空。
如果没有选择图像文件进行后期更新,我如何解决此问题以允许使用当前图像?
【问题讨论】:
如果选择了新图像,我希望帖子使用该图像进行更新,因此更新。但是,如果未选择图像,则应自动使用当前图像,而不必重新选择它或因未选择图像而出错。 你已经问过这个here。 现在才意识到这一点。你完全正确。 我在下面发布了代码,感谢@porloscerros 引起我的注意。只需要做一个小调整。 太好了,我记得看到这个问题是因为我正要回答它,但有人更快。虽然不是同一个模型,但逻辑是一样的。 【参考方案1】:您可以简单地检查表单中是否有图像文件。如果有,您将上传并使用该路径名进行更新,否则使用旧图像..
if ($request->hasFile('image')
$imagePath = request('image')->store('uploads', 'public');
else
$imagePath = $post->image;
然后像现在一样输入代码
$post->update([
'caption' => $data['caption'],
'url' => $data['url'],
'image' => $imagePath,
]);
【讨论】:
谢谢。虽然我已经成功尝试了@porloscerros 引起我注意的代码,但我也尝试了您的建议并且它有效!【参考方案2】: public function update(Post $post, Request $request)
$data = request()->validate([
'caption' => 'required',
'url' => 'required',
'image' => ['nullable', 'image'],
]);
$updateData = [
'caption' => $data['caption'],
'url' => $data['url'],
];
if (request('image'))
$imagePath = request('image')->store('uploads', 'public');
$updateData['image'] = $imagePath;
$post->update($updateData);
return redirect('/users/' . auth()->user()->id);
我是这样做的,它有效@porloscerros Ψ。感谢您引起我的注意。我只需要做一个小调整。
【讨论】:
以上是关于当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 laravel 8的主要内容,如果未能解决你的问题,请参考以下文章