php - laravel 8 中的文件上传 - 在 null 上调用成员函数 getClientOriginalName() 时出错
问题描述
我有一个课程管理 CRUD。
文件上传给我以下错误
在 null 上调用成员函数 getClientOriginalName() 时出错
当我在没有附件的情况下更新课程时遇到了这个问题。
谁能帮我理解我在这里做错了什么?PS。我是 Laravel 和 MVC 框架的新手。
提前致谢。
存储和更新方法
public function CourseManagementStore(Request $request){
$validatedData =$request->validate([
'coursename' => 'required|unique:course_management',
'file' => 'required|mimes:doc,docx,csv,txt,xlx,xls,pdf|max:2048',
]);
$name = $request->file('file')->getClientOriginalName();
$path = $request->file('file')->store('public/uploads/coursedocs');
$data = new CourseManagement();
$data->coursename = $request->coursename;
$data->courseshortname = $request->courseshortname;
$data->awardingbody = $request->awardingbody;
$data->coursecategory = $request->coursecategory;
$data->courseduration = $request->courseduration;
$data->issuedate = $request->issuedate;
$data->validtill = $request->validtill;
$data->molapprovaldate = $request->molapprovaldate;
$data->molvalidtilldate = $request->molvalidtilldate;
$data->feestrainingonly = $request->feestrainingonly;
$data->feesexamonly = $request->feesexamonly;
$data->feesindividual = $request->feesindividual;
$data->feestamkeen = $request->feestamkeen;
$data->feesmol = $request->feesmol;
$data->feescompanysponsor = $request->feescompanysponsor;
$data->courseref = $request->courseref;
$data->molref = $request->molref;
$data->courseregstatus = $request->courseregstatus;
$data->coursedescription = $request->coursedescription;
$data->coursedocdesc = $request->coursedocdesc;
$data->trainer = $request->trainer;
$data->name = $name;
$data->path = $path;
$data->save();
$notification = array (
'message' => 'Course Added successfully',
'alert-type' => 'success'
);
return redirect()->route('course.viewall')->with($notification);
}
public function CourseManagementUpdate(Request $request, $id){
$data = CourseManagement::find($id);
$name = $request->file('file')->getClientOriginalName();
$path = $request->file('file')->store('public/uploads/coursedocs');
$data = new CourseManagement();
$data->coursename = $request->coursename;
$data->courseshortname = $request->courseshortname;
$data->awardingbody = $request->awardingbody;
$data->coursecategory = $request->coursecategory;
$data->courseduration = $request->courseduration;
$data->issuedate = $request->issuedate;
$data->validtill = $request->validtill;
$data->molapprovaldate = $request->molapprovaldate;
$data->molvalidtilldate = $request->molvalidtilldate;
$data->feestrainingonly = $request->feestrainingonly;
$data->feesexamonly = $request->feesexamonly;
$data->feesindividual = $request->feesindividual;
$data->feestamkeen = $request->feestamkeen;
$data->feesmol = $request->feesmol;
$data->feescompanysponsor = $request->feescompanysponsor;
$data->courseref = $request->courseref;
$data->molref = $request->molref;
$data->courseregstatus = $request->courseregstatus;
$data->coursedescription = $request->coursedescription;
$data->coursedocdesc = $request->coursedocdesc;
$data->trainer = $request->trainer;
$data->name = $name;
$data->path = $path;
$data->save();
$notification = array (
'message' => 'Course updated successfully',
'alert-type' => 'success'
);
return redirect()->route('course.viewall')->with($notification);
}
更新课程表
<form method="post" action="{{ route('course.update', $editData->id ) }}" enctype="multipart/form-data" id="upload-file">
@csrf
<!-- Basic Forms -->
<!-- .box-header -->
<div class="box">
<div class="box-header with-border">
<h4 class="box-title">Edit Course</h4>
</div>
<!-- /.box-header -->
<!-- .box-body -->
<div class="box-body">
<div class="row"><!-- .box-body row-->
<div class="col"><!-- .box-body col-->
<div class="row">
<div class="col-12">
<div class="row"> <!-- start row -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Course Name<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="coursename" class="form-control" value="{{ $editData ->coursename }}" required data-validation-required-message="This field is required">
</div>
@error('coursename')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- start col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Course Short Name<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="courseshortname" value="{{ $editData ->courseshortname }}" class="form-control" >
</div>
@error('courseshortname')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 6 -->
</div><!-- end row -->
<div class="row"> <!-- start row -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Awarding Body <span class="text-danger">*</span></h5>
<select name="awardingbody" class="form-control select2" style="width: 100%;">
<option value="{{ $editData->awardingbody }}">{{ $editData->awardingbody }}</option>
@foreach($awardingbodies as $awardingbody)
<option>{{$awardingbody->name}}</option>
@endforeach
</select>
</select>
</div>
</div><!-- start col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Course Category <span class="text-danger">*</span></h5>
<select name="coursecategory" class="form-control select2" style="width: 100%;">
<option value="{{ $editData->coursecategory }}">{{ $editData->coursecategory }}</option>
@foreach($coursecategories as $coursecategory)
<option>{{$coursecategory->name}}</option>
@endforeach
</select>
</div>
</div><!-- end col 6 -->
</div><!-- end row -->
<div class="row"> <!-- start row -->
<div class="col-md-3"> <!-- start col 3 -->
<div class="form-group">
<h5>Course Ref Number<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="courseref" value="{{ $editData ->courseref }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('courseref')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
<div class="form-group">
<h5>MOL Ref Number<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="molref" value="{{ $editData ->molref }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('molref')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 3 -->
<div class="col-md-3"> <!-- start col 3 -->
<div class="form-group">
<h5>Trainer<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="trainer" value="{{ $editData ->trainer }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('trainer')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
<div class="form-group">
<h5>Course Duration<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="courseduration" value="{{ $editData ->courseduration }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('courseduration')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Course Description <span class="text-danger">*</span></h5>
<div class="controls">
<textarea rows="5" cols="5" name="coursedescription" class="form-control" placeholder="Textarea"> {{ $editData ->coursedescription }}</textarea>
</div>
@error('coursedescription')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- start col 6 -->
</div><!-- end row -->
</div> <!-- end col-->
</div><!-- end row -->
</div><!--/ .box-body col-->
</div><!--/ .box-body row-->
</div><!--/ .box-body -->
</div> <!--/ .box -->
<div class="box"> <!-- .box -->
<div class="box-header with-border">
<h4 class="box-title">Fees</h4>
</div>
<div class="box-body"><!-- .box-body -->
<div class="row"> <!-- .box-body row -->
<div class="col"> <!-- .box-body col -->
<div class="row"> <!-- start row -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>Training Only<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feestrainingonly" value="{{ $editData ->feestrainingonly }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feestrainingonly')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>Exam Only<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feesexamonly" value="{{ $editData ->feesexamonly }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feesexamonly')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>Individual Fees<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feesindividual" value="{{ $editData ->feesindividual }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feesindividual')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>Tamkeen Fees<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feestamkeen" value="{{ $editData ->feestamkeen }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feestamkeen')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>MOL Fees<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feesmol" value="{{ $editData ->feesmol }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feesmol')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
<div class="col-md-2"> <!-- start col 2 -->
<div class="form-group">
<h5>Company Sponsor Fees<span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="feescompanysponsor" value="{{ $editData ->feescompanysponsor }}" class="form-control" required data-validation-required-message="This field is required">
</div>
@error('feescompanysponsor')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 2 -->
</div><!-- end row -->
</div><!--/ .box-body col-->
</div><!--/ .box-body row-->
</div><!--/ .box-body -->
</div> <!--/ .box -->
<div class="box"> <!-- .box -->
<div class="box-header with-border">
<h4 class="box-title">Issue & Validation Dates</h4>
</div>
<div class="box-body"><!-- .box-body -->
<div class="row"> <!-- .box-body row -->
<div class="col"> <!-- .box-body col -->
<div class="row"> <!-- start row -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>MOL Approval Issue Date <span class="text-danger">*</span></h5>
<div class="controls">
<input type="date" name="molapprovaldate" value="{{ $editData ->molapprovaldate }}" class="form-control" >
</div>
@error('molapprovaldate')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- start col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>MOL Approval Valid Till <span class="text-danger">*</span></h5>
<div class="controls">
<input type="date" name="molvalidtilldate" value="{{ $editData ->molvalidtilldate }}" class="form-control" >
</div>
@error('molvalidtilldate')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 6 -->
</div><!-- end row -->
<div class="row"> <!-- start row -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Issue Date <span class="text-danger">*</span></h5>
<div class="controls">
<input type="date" name="issuedate" class="form-control" value="{{ $editData ->issuedate }}" required data-validation-required-message="This field is required">
</div>
@error('issuedate')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- start col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Valid Till <span class="text-danger">*</span></h5>
<div class="controls">
<input type="date" name="validtill" value="{{ $editData ->validtill }}" class="form-control" >
</div>
@error('validtill')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 6 -->
</div><!-- end row -->
</div><!--/ .box-body col-->
</div><!--/ .box-body row-->
</div><!--/ .box-body -->
</div> <!--/ .box -->
<div class="box"> <!-- .box -->
<div class="box-header with-border">
<h4 class="box-title">Documents</h4>
</div>
<div class="box-body"><!-- .box-body -->
<div class="row"> <!-- .box-body row -->
<div class="col"> <!-- .box-body col -->
<div class="row"> <!-- start row -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Document Name <span class="text-danger">*</span></h5>
<div class="controls">
<input type="file" name="file" id="file" class="form-control" >
</div>
@error('Course Document')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- start col 6 -->
<div class="col-md-6"> <!-- start col 6 -->
<div class="form-group">
<h5>Description <span class="text-danger">*</span></h5>
<div class="controls">
<textarea rows="3" cols="5" name="coursedocdesc" class="form-control" placeholder="Textarea"></textarea>
</div>
@error('name')
<span class="text-info">{{ $message }}</span>
@enderror
</div>
</div><!-- end col 6 -->
</div><!-- end row -->
</div><!--/ .box-body col-->
</div><!--/ .box-body row-->
</div><!--/ .box-body -->
</div> <!--/ .box -->
<div class="box"> <!-- .box -->
<div class="box-header with-border">
<h4 class="box-title">Course Status</h4>
</div>
<div class="box-body"><!-- .box-body -->
<div class="row"> <!-- .box-body row -->
<div class="col"> <!-- .box-body col -->
<div class="row"> <!-- start row -->
<div class="col-md-12"> <!-- start col 12 -->
<div class="form-group">
<h5>Course Registration Status <span class="text-danger">*</span></h5>
<div class="controls">
<select name="courseregstatus" id="select" required class="form-control">
<option value="{{ $editData ->courseregstatus }}">{{ $editData ->courseregstatus }}</option>
<option value="Pending">Pending</option>
<option value="Valid">Valid</option>
<option value="Expired">Expired</option>
<option value="Processing-Renewal">Processing Renewal</option>
<option value="Course-Khallas">Course Khallas!</option>
</select>
</div>
</div>
</div><!-- start col 12 -->
</div><!-- end row -->
</div><!--/ .box-body col-->
</div><!--/ .box-body row-->
</div><!--/ .box-body -->
</div> <!--/ .box -->
<div class="text-xs-right">
<input type="submit" class="btn btn-info btn-rounded mb-5" value="Update">
</div>
</form>
解决方案
由于添加文件不是强制性的,因此您必须测试$request->file('file')
它是否为null。因此,将其添加到您的代码中以避免错误:
public function CourseManagementUpdate(Request $request, $id){
$data = CourseManagement::find($id);
$data->coursename = $request->coursename;
$data->courseshortname = $request->courseshortname;
$data->awardingbody = $request->awardingbody;
$data->coursecategory = $request->coursecategory;
$data->courseduration = $request->courseduration;
$data->issuedate = $request->issuedate;
$data->validtill = $request->validtill;
$data->molapprovaldate = $request->molapprovaldate;
$data->molvalidtilldate = $request->molvalidtilldate;
$data->feestrainingonly = $request->feestrainingonly;
$data->feesexamonly = $request->feesexamonly;
$data->feesindividual = $request->feesindividual;
$data->feestamkeen = $request->feestamkeen;
$data->feesmol = $request->feesmol;
$data->feescompanysponsor = $request->feescompanysponsor;
$data->courseref = $request->courseref;
$data->molref = $request->molref;
$data->courseregstatus = $request->courseregstatus;
$data->coursedescription = $request->coursedescription;
$data->coursedocdesc = $request->coursedocdesc;
$data->trainer = $request->trainer;
if ( isset($request->file('file')) != null ) {
$data->name = $request->file('file')->getClientOriginalName();
$data->path = $request->file('file')->store('public/uploads/coursedocs');
}
$data->save();
$notification = array (
'message' => 'Course updated successfully',
'alert-type' => 'success'
);
return redirect()->route('course.viewall')->with($notification);
}
推荐阅读
- python - 如何计算python中每一列中缺失的数据?
- javascript - 在 ngFor 中更新模型
- docker - 如何最小化只需要 git、cron 和 openjdk-8-jre 的 ubuntu docker 镜像
- javascript - 在 select2 输入搜索元素处添加自定义事件
- javascript - 推迟更新 DOM
- wordpress - 根目录“下方”的文件的正确路径是什么?
- wordpress - 使用简码遍历 WordPress 中的数组
- regex - Perl 字符串操作和查找
- c# - 在 ASP.Net MVC Web 应用程序中调试按钮的功能 - 来自新手的 101 问题
- drupal-8 - “drush cache-rebuild”抛出未找到驱动程序错误