如何在 laravel 中编辑图像和更新

How to edit image and update in laravel

我有一个名为服务的 table,现在这个 table 有以下 -

-编号 -标题 -body -图片 -鼻涕虫 -时间戳

在管理员中,我为添加、编辑、删除它创建的服务页面。

我的问题是editupdate一张图片。一个奇怪的问题是,当我将服务 table(数据库)中的 image 字段更改为 aaaaa 字段时,没有任何反应。应该发生。因为我将 image 的重命名更​​改为 aaaaa.

web.php

Route::resource('services', 'ServiceController');

ServiceController.php

public function edit(Service $service)
{
    return view('Admin.services.edit', compact('service'));
}

public function update(Request $request, Service $service)
{
    $service->title = $request->title;
    $service->body = $request->body;

    if($request->has('image')) {
        $image = $request->file('image');
        $filename = $image->getClientOriginalName();
        $image->move(public_path('images/services'), $filename);
        $service->image = $request->file('image')->getClientOriginalName();
    }

    $service->update();

    return redirect()->route('services.index');
}

edit.blade.php

<form class="form-horizontal" action="{{ route('services.update', $service->id) }}" method="post" enctype="multipart/form-data">
    {{ csrf_field() }}
    {{ method_field('PATCH') }}
    @include('Admin.layouts.errors')
    <div class="form-group">
        <label for="title">عنوان</label>
        <input type="text" class="form-control" id="title" name="title" placeholder="عنوان" value="{{ $service->title ? : old('title') }}">
    </div>
    <div class="form-group">
        <label for="body">متن</label>
        <textarea class="form-control" rows="10" id="body" name="body" placeholder="متن">{{ $service->body ? : old('body') }}</textarea>
    </div>
    <div class="form-group">
        <label for="images">تصویر</label>
        <div class="custom-file">
            <input type="file" class="custom-file-input" id="images" name="images">
            <label class="custom-file-label" for="images">تصویر محصول</label>
        </div>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary">ذخیره</button>
    </div>
</form>

Service.php

protected $fillable = [
    'title',
    'body',
    'image',
    'slug',
];

我什至在 update 方法中更改了控制器,如下所示,没有任何反应。

$service->save(); 

在 html 你有:

<input type="file" class="custom-file-input" id="images" name="images">

在控制器中:$request->file('image').

替换

<input type="file" class="custom-file-input" id="images" name="images">

<input type="file" class="custom-file-input" id="images" name="image">

我认为在 laravel 中编辑图像的有效方法之一。 将其添加到控制器顶部

use File;

首先在变量中获取您的 bannerId

$bannerId = $request->banner_id;

通过find()获取该id的对象。

  $bannerData = FrontEndBanner::find($bannerId);

检查文件是否存在,检查文件是否已经存在,然后删除该文件,否则相同的名称将插入到 imageName 变量中

if ($request->hasFile('banner_image')){
    $image_path = public_path("/uploads/resource/".$bannerData->banner_name);
    if (File::exists($image_path)) {
        File::delete($image_path);
    }
    $bannerImage = $request->file('banner_image');
    $imgName = $bannerImage->getClientOriginalName();
    $destinationPath = public_path('/uploads/resource/');
    $bannerImage->move($destinationPath, $imgName);
  } else {
    $imgName = $bannerData->banner_name;
  }

  $bannerData->title = $request->banner_title;
  $bannerData->banner_name = $imgName;
  $bannerData->save();

如果有人有问题,请发表评论