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

Posted

技术标签:

【中文标题】在 laravel 中更新时使用 newone 删除以前的文件【英文标题】:delete the previous file with newone on update in laravel 【发布时间】:2021-07-07 08:13:37 【问题描述】:

我的更新文件会怎样?

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

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

我尝试了另一个代码,但出现错误“调用成员函数 getClientOriginalName on null。当我需要文件然后输入文件时,总是有输入.pdf文件的警告。

【问题讨论】:

【参考方案1】:

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

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

,为什么会这样?

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

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

【讨论】:

以上是关于在 laravel 中更新时使用 newone 删除以前的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 modal 的 Laravel 8 crud 不向数据库添加数据

在 LARAVEL 更新表单中使用变量

当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 laravel 8

在Laravel中,当我直接用数据库更新内容时,我怎样才能保持搜索索引有正确的数据更新?

在 axios 调用时,DOM 不显示 vue.js 和 laravel 中数组的更新数据

Laravel:使用 Query Builder 或 Eloquent ORM 时在每次插入/更新时执行一些任务