在 laravel 更新时用 newone 删除以前的文件

delete the previous file with newone on update in laravel

我的更新文件怎么了?

我无法在我的程序中更新文件,我的控制器有什么问题?

edit.blade.php

<div class="row">
    <div class="col-12">
        {{ Form::model($activityreports,['route'=>['activityreports.update',$activityreports['id']], 'files'=>true, 'method'=>'GET', 'enctype'=>'multipart/form-data']) }}
        <div class="card">
            <div class="card-body">
                @if(!empty($errors->all()))
                <div class="alert alert-danger">
                    {{ Html::ul($errors->all())}}
                </div>
                @endif
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            {{ Form::label('file', 'Laporan Kegiatan') }}
                            {{ Form::file('file', ['class'=>'form-control']) }}        
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- </form> -->
        {{ Form::close() }}
    </div>
</div>

控制器

public function update(Request $request, $id)
    {
        //
        $rules=[
             
            'title'=>'required',
            'date'=>'required',
            'type'=>'required',
            'place'=>'required'
        ];
 
        $pesan=[
            'title.required'=>'Judul Kegiatan Tidak Boleh Kosong',
            'date.required'=>'Tanggal Kegiatan Tidak Boleh Kosong',
            'type.required'=>'Jenis Kegiatan Tidak Boleh Kosong',
            'place.required'=>'Lokasi Kegiatan Tidak Boleh Kosong',
        ];
 
 
        $validator=Validator::make(Input::all(),$rules,$pesan);
 
        if ($validator->fails()) {
            return Redirect::to('admin/activityreports/'.$id.'/edit')
            ->withErrors($validator);
 
        }else{
            $fileName="";
 
            $activityreports=Activityreports::find($id);

            if($request->hasFile('file')){
                Storage::delete($activityreports->file);

                $file=$request->file('file');
                $fileName=$file->getClientOriginalName();
                $file->move('storage/file/activityreportsFile/', $fileName);
                $activityreports->file=$fileName;  
            }
                
            $activityreports->title=Input::get('title');
            $activityreports->date=Input::get('date');
            $activityreports->type=Input::get('type');
            $activityreports->place=Input::get('place');
            $activityreports->save();
 
            Session::flash('message','Data Berhasil Diubah');
             
            return Redirect::to('admin/activityreports/index');
        }

我尝试了另一个代码,但出现错误'Call to member function getClientOriginalName on null。当我制作需要文件然后输入文件时,总是有输入 .pdf 文件的警告。

首先,我们是导致错误的问题:

这一行 $file=$request->file('file');$file 设置为空,因此您无法调用下一行中的函数。 这意味着您的请求中不存在任何文件。如果您在更新方法中调用 dd($request->all()),您可以检查您的请求。

第二,为什么会这样?

我认为您的问题是您在视图中创建了一个 GET 表单,因此将发送一个 GET 请求。您可能必须发出 POST 请求(您也可以发出 PATCH 请求,因为您在控制器中调用了更新方法)。

请将表格更改为 POST,并将您的路线更改为 POST,然后重试。