首页 > 解决方案 > 在 laravel 上编辑数据时无法更新图像

问题描述

当我创建新数据时没有问题。一切正常,包括上传图片。我的图像插入到 public/image 目录。但是当我尝试编辑或更新时,我遇到了问题。我应该插入公共/图像的图像不适用于更新功能。

控制器在下面

public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'sequence' => 'required',
            'image' => 'required|image|max:2048',
            'link' => 'required',
            'status' => 'required',
        ]);

        $image = $request->file('image');

        $new_name = $request->name .rand(). '.' . $image->getClientOriginalExtension();
        $image->move(public_path('images'), $new_name);

        $form_data = array(
            'name'             =>  $request->name,
            'sequence'         =>  $request->sequence,
            'image'            =>  $new_name,
            'link'             =>  $request->link,
            'status'           =>  $request->status,
        );

        Banner::create($form_data);

        return redirect()->route('banner.index');
    }

public function update(Request $request, Banner $banner)
        {
            $image_name = $request->hidden_image;
            $image = $request->file('image');
            if($image != ''){
                $request->validate([
                    'name' => 'required',
                    'sequence' => 'required',
                    'image' => 'image|max:2048',
                    'link' => 'required',
                    'status' => 'required',
                ]);
                $image_name = $request->name .rand(). '.' . $image->getClientOriginalExtension();
                $image->move(public_path('images'), $image_name);

            }

            else{
                $request->validate([
                    'name' => 'required',
                    'sequence' => 'required',
                    'link' => 'required',
                    'status' => 'required',
                ]);
            }

            $form_data = array(
                'name'             =>  $request->name,
                'sequence'         =>  $request->sequence,
                'image'            =>  $image_name,
                'link'             =>  $request->link,
                'status'           =>  $request->status,
            );

            Banner::whereId($banner)->update($form_data);
            return redirect()->route('banner.index');

        }

我的视图代码如下

<form action="{{ route('banner.update',$banner->id) }}" method="POST">
                            @csrf
                            @method('PUT')

                            <div class="row" style="margin-top: 10px">
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <div class="form-group">
                                        <strong>Name:</strong>
                                        <input type="text" name="name" value="{{ $banner->name }}" class="form-control" placeholder="Name">
                                    </div>
                                </div>
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <div class="form-group">
                                        <strong>Sequence</strong>
                                        <input type="number" name="sequence" value="{{ $banner->sequence }}" class="form-control" placeholder="Sequence">
                                    </div>
                                </div>
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                <div class="form-group">
                                <strong>Image</strong>
                                  <div class="col-md-8">
                                  <img src="{{ URL::to('/') }}/images/{{ $banner->image }}" class="img-thumbnail" width="200" />
                                  </div>
                                  <div class="col-md-8">
                                    <input type="file" name="image" /> 
                                    <input type="text" name="hidden_image" value="{{ $banner->image }}" />
                                   </div> 
                                  </div>
                                </div>
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <div class="form-group">
                                        <strong>Link</strong>
                                        <input type="text" name="link" value="{{ $banner->link }}" class="form-control" placeholder="Link">
                                    </div>
                                </div>
                                <div class="col-xs-12 col-sm-12 col-md-12">
                                    <div class="form-group">
                                        <strong>Status</strong>
                                        <input type="text" name="status" value="{{ $banner->status }}" class="form-control" placeholder="Status">
                                    </div>
                                </div>
                                <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                                <button type="submit" class="btn btn-primary">Submit</button>
                                </div>
                            </div>

                        </form>

标签: laravelimagecrud

解决方案


您的表单缺少enctype属性,因此没有文件与表单一起传递。添加该属性,一切都会起作用。

<form action="{{ route('banner.update',$banner->id) }}" method="POST" enctype="multipart/form-data">

推荐阅读