不选择图像更新会出错 (Laravel)

Update without selecting Image get an Error (Laravel)

首先我想更新一个表单,如果我 select 另一个图像就可以正常工作。

但如果我没有 select 图片,它会给出 $imageName 错误

     $request->validate([
            'type'      => 'required',
            'title'     => 'required',
            'body'      => 'required',
            'excerpt'   => 'required',
            'tag'       => 'required',
            'metas'     => 'required',
            'ispublished'     => 'required',
        ]);
        if ($request->hasFile('image')) 
        {
                request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
                $imageName = time().'.'.request()->image->getClientOriginalExtension();
                request()->image->move(public_path('images'), $imageName);
        }
        $post             =  post::find($id);
        $post->type       = $request->get('type');
        $post->slug       = str_slug($request->get('title'));
        $post->title      = $request->get('title');
        $post->body       = $request->get('body');
        $post->excerpt    = $request->get('excerpt');
        $post->tag        = $request->get('tag');
        $post->image      = $imageName;
        $post->metas       = $request->get('metas');
        $post->ispublished = $request->get('ispublished');
        $post->published_at = $request->get('published_at');
        $post->save();

        return redirect()->route('post.index')->with('success','Post updated successfully');

如果我没有 select 图片,这就是错误

如何在没有图像的情况下进行更新?select

它正在重定向并出现错误,因为当用户没有 select 图像时它找不到 $imageName 变量。即使用户没有 select 图像,您也可以分配变量。

    if ($request->hasFile('image')) 
            {
                    request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
                    $imageName = time().'.'.request()->image->getClientOriginalExtension();
                    request()->image->move(public_path('images'), $imageName);
            }else
   {
    $imageName = null;
    }

您应该在 if 条件之前声明 $imageName。例如:

$imageName = ""; 

您可以使用 if 来检查文件是否存在,如果文件存在则更新。

$post             =  post::find($id);
    $post->type       = $request->get('type');
    $post->slug       = str_slug($request->get('title'));
    $post->title      = $request->get('title');
    $post->body       = $request->get('body');
    $post->excerpt    = $request->get('excerpt');
    $post->tag        = $request->get('tag');
    if ($request->hasFile('image')) 
    {
        $post->image = $imageName;
    }
    $post->metas       = $request->get('metas');
    $post->ispublished = $request->get('ispublished');
    $post->published_at = $request->get('published_at');
    $post->save();

仅替换:

if(isset($imageName) && $imageName !== "") {
    $post->image      = $imageName;
}

最好更新图像列,更新完成后,也可以在模型中创建新资源。 试试这个。

     $post =  post::find($id);
        $post->type       = $request->get('type');
        $post->slug       = str_slug($request->get('title'));
        $post->title      = $request->get('title');
        $post->body       = $request->get('body');
        $post->excerpt    = $request->get('excerpt');
        $post->tag        = $request->get('tag');
        $post->metas       = $request->get('metas');
        $post->ispublished = $request->get('ispublished');
        $post->published_at = $request->get('published_at');
        $post->save();

 if ($request->hasFile('image')) 
{
 request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
        $imageName = time().'.'.request()->image->getClientOriginalExtension();
        request()->image->move(public_path('images'), $imageName);
        $update = Post::where('id', $id)->update([
                 'image' => $imageName
             ]);
        }

@Aditya Thakur 的 Anser 看起来不错,但

如果用户正在更新图像

更新查询将运行两次它不是必需的

所以试试下面的代码

        $post =  post::find($id);
        $imageName =  $post->image;

        if ($request->hasFile('image')) 
        {
            request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
            $uplodedObject = $request->file('image');
            $imageName = md5(time()).'.' .$uplodedObject->getClientOriginalExtension();
            $uplodedObject->move(public_path('images'), $imageName);
        }

        $post->type       = $request->get('type');
        $post->slug       = str_slug($request->get('title'));
        $post->title      = $request->get('title');
        $post->body       = $request->get('body');
        $post->excerpt    = $request->get('excerpt');
        $post->tag        = $request->get('tag');
        $post->image        = $imageName;
        $post->metas       = $request->get('metas');
        $post->ispublished = $request->get('ispublished');
        $post->published_at = $request->get('published_at');
        $post->save();

您需要声明 $imageName 变量。

$imageName = "";

if ($request->hasFile('image')) 
    {
            request()->validate(['image' => 'file|image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
            $imageName = time().'.'.request()->image->getClientOriginalExtension();
            request()->image->move(public_path('images'), $imageName);
    }