尝试在我的更新控制器中实现更新文章似乎有效,但问题是当我只想更新帖子而不上传旧图像时,旧图像总是被删除,这是不应该的。
这是我的商店功能
public function store(Post $post)
{
$post->update($this->validateRequest());
$this->storeImage($post);
return redirect('post/'.$post->id)->with('success', 'New ariticle has been posted');
}
}
这是我的验证
private function validateRequest()
{
return request()->validate([
'title'=> 'required',
'content' => 'required',
'image' => 'sometimes|image|max:5000',
]);
}
这是我的更新功能
public function update(Post $post)
{
File::delete(public_path('storage/'.$post->image));
$post->update($this->validateRequest());
$this->storeImage($post);
return redirect('post/'.$post->id)->with('success', 'This post has
been Edited');
}
}
我试图添加File::delete到我的 storeImage 函数并从我的更新函数中删除它,它解决了问题,但旧图像没有从目录中删除
private function storeImage($post)
{
if (request()->has('image')){
File::delete(public_path('storage/'.$post->image))
$post->update([
'image' => request()->image->store('uploads', 'public'),
]);
$image = Image::make(public_path('storage/'.$post->image))->fit(750, 300);
$image->save();
}
}
好的,因为我在控制器中使用模型绑定,所以我不必找到 id 对吗?所以我改变了我的更新功能,基本上是 Akhtar munir 建议的,结果是这样的。图像更新工作,它也会在我更新时删除旧图像。但是我发现了另一个问题,问题是当我编辑文章和标题时它没有像我更新时那样改变,我希望你能看看这是正确的吗?
public function update(Post $post){
$this->validateRequest();
if(request()->hasFile('image') && request('image') != ''){
$imagePath = public_path('storage/'.$post->image);
if(File::exists($imagePath)){
unlink($imagePath);
}
$image = request()->file('image')->store('uploads', 'public');
$post->update([
'title' => request()->title,
'content' => request()->content,
'image' => $image,
]);
}
}
MYYA
喵喵时光机