首页 > 解决方案 > 如何在 laravel 中以编辑形式获取旧图像?代码是什么?

问题描述

//这是我的编辑表单(图像字段) 我有一个编辑表单,其中有一个图像字段,用户可以在其中上传新图像,如果他愿意。

但是,如果用户不上传新照片,我只想使用数据库中已经存在的照片。并且根本不更新图像字段。但是在我的代码中,每当我尝试不上传新的图像表单时,都不会采用旧的输入值。

<div class="form-group">
   <input type="file" name="image">
 </div>

//这是更新函数

 public function update(Request $request, $id)
    {
        $this->validate($request,[
            'name' => 'required',
            'image' => 'mimes:jpeg,bmp,png,jpg'
        ]);
        // get form image
        $image = $request->file('image');
        $slug = str_slug($request->name);
        $category = Category::find($id);
        if (isset($image))
        {
//            make unique name for image
            $currentDate = Carbon::now()->toDateString();
            $imagename = $slug.'-'.$currentDate.'-'.uniqid().'.'.$image->getClientOriginalExtension();
//            check category dir is exists
            if (!Storage::disk('public')->exists('category'))
            {
                Storage::disk('public')->makeDirectory('category');
            }
//            delete old image
            if (Storage::disk('public')->exists('category/'.$category->image))
            {
                Storage::disk('public')->delete('category/'.$category->image);
            }
//            resize image for category and upload
            $categoryimage = Image::make($image)->resize(1600,479)->stream();
            Storage::disk('public')->put('category/'.$imagename,$categoryimage);
            //            check category slider dir is exists
            if (!Storage::disk('public')->exists('category/slider'))
            {
                Storage::disk('public')->makeDirectory('category/slider');
            }
            //            delete old slider image
            if (Storage::disk('public')->exists('category/slider/'.$category->image))
            {
                Storage::disk('public')->delete('category/slider/'.$category->image);
            }
            //            resize image for category slider and upload
            $slider = Image::make($image)->resize(500,333)->stream();
            Storage::disk('public')->put('category/slider/'.$imagename,$slider);
        } else {
            $imagename = $category->image;
        }
        $category->name = $request->name;
        $category->slug = $slug;
        $category->image = $imagename;
        $category->save();
        Toastr::success('Category Successfully Updated :)' ,'Success');
        return redirect()->route('admin.category.index');
    }

//当我点击编辑按钮时,它显示没有文件选择它不显示旧图像..

标签: phphtmllaravel

解决方案


您应该在 STORE 函数中更改验证
,您应该提供图像并上传(如果需要
,但在 UPDATE 函数中,用户可能不想更改图像并且用户只想更改例如名称,所以用户可以在更新中选择无图像,
因此您在 UPDATE 中的验证必须是NULLABLE.

        $this->validate($request,[
            'name' => 'required',
            'image' => 'nullable|mimes:jpeg,bmp,png,jpg'
        ]);

推荐阅读