当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 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的主要内容,如果未能解决你的问题,请参考以下文章

带有文本和图像的 SwiftUI 表单选择器

使用 Django 表单编辑图像字段

选择一次更新按钮图像 iPad 不工作

如何在表单中使用图像? [复制]

Xamarin 表单列表视图 - 显示图像全宽,自动高度

在uitableview中选择时如何更改自定义单元格图像和标签字体颜色?