在 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->file('file');
将$file
设置为null,因此您不能在下一行调用该函数。
这意味着您的请求中不存在任何文件。如果您在更新方法中调用dd($request->all())
,您可以查看您的请求。
二,为什么会这样?
我认为您的问题是您在视图中创建了一个 GET 表单,因此将发送一个 GET 请求。您可能必须发出 POST 请求(您也可以发出 PATCH 请求,因为您在控制器中调用了更新方法)。
请将表单更改为 POST 并将您的路由更改为 POST,然后重试。
【讨论】:
以上是关于在 laravel 中更新时使用 newone 删除以前的文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 modal 的 Laravel 8 crud 不向数据库添加数据
当尚未在编辑表单中选择图像时,如何默认使用当前图像更新帖子。我正在使用 laravel 8
在Laravel中,当我直接用数据库更新内容时,我怎样才能保持搜索索引有正确的数据更新?