Laravel : 更新数据时在 null 上调用成员函数 getClientOriginalName()

Laravel : Call to a member function getClientOriginalName() on null when Update Data

我将更新其包含图像的数据,然后当我将发送更新到此处时出现错误调用成员函数 getClientOriginalName()

这是我的控制器

 public function updateBook(Request $request, $id){
    
    $book =   DB::table('books')->where('id',$id);
    $old = $book->select('images');

    $ChecK = 0;
    $file = var_dump($request->file('images')->getClientOriginalName());
    $filename = time().$file;
    $path = public_path('/Uploads');
    
    if($request->hasFile('images')){
        $file = $request->file('images');
        $file->move($path, $filename);
        Storage::delete($old);
        $ChecK = 1;
    }
    else {
        dd('Request Hash No File!');
    }
    $data = [
        'name'=> $request->input('bookName'),
        'year'=> $request->input('tahunT'),
        'author'=> $request->input('author'),
        'summary'=> $request->input('Summary'),
        'publisher'=> $request->input('publishers'),
        'pageCount' => $request->input('pageCount'),
        'readPage'=> $request->input('ReadPage'),
        'finished' => '$pageCount' == '$readPage' ? true : false,
        'reading' => '$readPage' > 0 ? true : false,
        'updatedAt'=> new DateTime()
    ];
    if( $ChecK == 1){
        $data = ['images' => $filename];
        $book->update($data);
        return redirect('home')->with('status', 'update succesfully'); 
    }
    else {
        $data = ['images' => $old];
        $book->update($data);
        return redirect('home')->with('status', 'Update with old image '); 
    }
}

这是视图

   <div class="card-body">
                @if (session('status'))
                    <div class="alert alert-success" role="alert">
                        {{ session('status') }}
                    </div>
                @endif
                @foreach ($toEdit as $dt)
                <form class="row g-3" enctype="multipart/form-data" method="POST" action="{{ route('update', $dt->id) }}" value="PUT">
                    {{ csrf_field() }}
                    <div class="col-md-6">
                        <label for="bookName" class="form-label">Nama Buku:</label>
                        <input type="text" class="form-control" name ="bookName"id="bookName" value="{{ ($dt->name) }}">
                    </div>
                    <div class="col-md-3">
                        <label for="tahunT" class="form-label">Tahun Terbit : </label>
                        <input type="number" class="form-control" name="tahunT" id="tahunT" value="{{ ($dt->year) }}">
                    </div>
                    <div class="col-md-3">
                        <label for="author" class="form-label">Author : </label>
                        <input type="text" class="form-control" name="author" id="author" value="{{ ($dt->author) }}">
                    </div>
                    <div class="col-md-6">
                        <label for="publishers" class="form-label">Publisher : </label>
                        <input type="text" class="form-control" name="publishers" id="publishers" value="{{ ($dt->publisher) }}">
                    </div>
                    <div class="col-md-3">
                        <label for="pageCount" class="form-label">Page Count :</label>
                        <input type="number" class="form-control" name="pageCount" id="pageCount" value="{{ ($dt->pageCount) }}">
                    </div>
                    <div class="col-md-3">
                        <label for="ReadPage" class="form-label">Read Page :</label>
                        <input type="number" class="form-control" name="ReadPage" id="ReadPage"value="{{ ($dt->readPage) }}">
                    </div>
                    <div class="col-12">
                        <label for="Summary" class="form-label">Summary :</label>
                        <textarea class="form-control" name="Summary" id="Summary">{{ ($dt->summary) }}</textarea>
                    </div>
                    <div class="col-md-12">
                        <label for="images" class="form-label">Book Image :</label>
                        <input type="file" class="form-group" name="images">
                        <br>
                        <img src="{{ asset('Uploads/'.$dt->images) }}" widht="300px"/>
                        <br>
                    </div>
                    <div class="col-12">
                        <button type="submit" class="btn btn-primary">Update</button>
                    </div>
                </form>
                @endforeach
            </div>

在这里,我将更新数据,如果用户想要更改图像,那么图像将被更新,如果没有,图像将使用旧图像。它与其他输入相同。但是,当我尝试上传新的时,错误 Call to a member function getClientOriginalName() 发生了。 你对此有何建议?我已经添加了代码 enctype="multipart/form-data"var_dump() 但错误是一样的。谢谢:)

您必须根据条件检查您的 image 是否为 null 以避免此错误。

试试这样的东西:

if ( isset($request->file('images')) != null ) {
    $ChecK = 0;
    $file = $request->file('images')->getClientOriginalName();
    $filename = time().$file;
    $path = public_path('/Uploads');
}
//..

只需添加一个简单的条件:

If($request->file('image')) {
  ...
$request->images->getClientOriginalNe();
.....

}