【问题标题】:how to fetch the old image in edit form in laravel ?what would be the code?如何在 laravel 中以编辑形式获取旧图像?代码是什么?
【发布时间】:2020-05-05 15:44:04
【问题描述】:

//这是我的编辑表单(图像字段) 我有一个编辑表单,其中有一个图像字段,用户可以根据需要上传新图像。

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

<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');
    }

// 当我点击编辑按钮时,它显示 No file Chosen 它不显示旧图像..

【问题讨论】:

    标签: php html laravel


    【解决方案1】:

    你应该改变你的验证
    在 STORE 功能中,您应该提供一张图片并上传(如果需要
    但在 UPDATE 功能中,用户可能不想更改图像,而用户只想更改例如名称,因此用户可以在更新中不选择图像
    所以您在 UPDATE 中的验证必须是 NULLABLE

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

    【讨论】:

    • 您应该在blade 文件中使用asset 来显示来自PUBLIC 文件夹的图像或其他内容,以便在刀片&lt;img src="{{asset($category-&gt;image)}}"&gt; 中使用资产。 2 个注意事项:$category 来自您的控制器在资产中,您应该设置完整路径和全名以从公共文件夹访问图像
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多