首页 > 解决方案 > 我被困了 2 天,这可能是一件显而易见的事情 - PHP + Laravel 图像更新

问题描述

我开始创建一个电子商务平台,但遇到了一个两天都无法解决的问题。这可能很明显,但我就是找不到解决方案。你能帮我解决这个问题吗?我收到此错误:

[Route: images.update] [URI: dashboard/images/{image}] 缺少必需的参数。(查看:C:\xampp\htdocs\ecommerce\ecommerce\resources\views\website\admin\product_image\update.blade.php)

update.blade.php

@extends('website.admin.layouts.main')
@section('content')

<div class="col-md-12 col-sm-12 ">
  <div class="x_panel">
    <div class="x_title">
      <h2>Zaktualizuj obraz</h2>
      <div class="clearfix"></div>
    </div>

    <div class="x_content">
      <br />

      <form id="updateimage-form" data-parsley-validate="" class="form-horizontal form-label-left" novalidate="" enctype="multipart/form-data" method="POST" action="{{route('images.update', $productImage->id)}}">

        @csrf
        @method('PUT')

        <div class="item form-group">

          <label class="col-form-label col-md-3 col-sm-3 label-align" for="first-name">Produkt<span class="required">*</span></label>

          <div class="col-md-6 col-sm-6 ">
            <select class="form-control" name="product_id">

              @foreach ($product as $prodcat)

                <option value="{{$prodcat -> id}}" name="product_id">{{ $prodcat -> product_name }}</option>

              @endforeach

            </div>
        </div>

        <div class="ln_solid"></div>

        <div class="item form-group">
          <label class="col-form-label col-md-3 col-sm-3 label-align" for="first-name">Nazwa obrazu<span class="required">*</span></label>
          <div class="col-md-6 col-sm-6 ">
            <input type="text" id="img_title" name="img_title" placeholder="Image Title" value="{{ $productImage -> image_name }}" required="required" class="form-control ">
          </div>
        </div>

        <div class="item form-group">
          <label class="col-form-label col-md-3 col-sm-3 label-align" for="first-name">Wgraj obraz<span class="required">*</span></label>
          <div class="col-md-6 col-sm-6 ">
            <input type="file" name="img" id="img" onchange="fileSelected();"/>
          </div>
        </div>

        <div class="item form-group">
          <div class="col-md-6 col-sm-6 offset-md-3">
            <button class="btn btn-primary" type="reset">Wyczyść</button>
            <button type="submit" class="btn btn-success">Zaktualizuj obraz</button>
          </div>
        </div>
      </form>
    </div>
  </div>
</div>

@endsection

模型\ProductImage.php

<?php

namespace App\Models\models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ProductImage extends Model
{
  protected $fillable = [
    'product_id',
    'image_name',
    'image',
    'slug',
    'status'
  ];

  public function product()
  {
    return $this -> belongsTo('App\Models\models\Product');
  }
}

ProductImageController.php

<?php

namespace App\Http\Controllers;

use App\Models\models\Product;
use App\Models\models\ProductImage;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class ProductImageController extends Controller
{
  public function index()
  {
    $productImage = ProductImage::all();
    return view('website.admin.product_image.index', compact('productImage'));
  }

  public function create()
  {
    $product = Product::all();
    return view('website.admin.product_image.create', compact('product'));
  }

  public function store(Request $request)
  {
    $slug = Str::slug($request->image_name, '-');

    $image = time().'.'.$request->image->extension();
    $request->image->move(public_path('images'), $image);

    ProductImage::create([
      'image_name'=>$request->image_name,
      'image'=>$image,
      'product_id'=>$request->product_id,
      'slug'=>$slug,
    ]);

    return redirect()->route('images.index');

    }

    public function show(ProductImage $ProductImage)
    {
      //
    }

    public function edit(ProductImage $productImage)
    {
      $product = Product::all();
      return view('website.admin.product_image.update',compact('productImage','product'));
    }

    public function update(Request $request, ProductImage $productImage)
    {
      $slug=Str::slug($request->image_name,'-');

      if($request->image)
      {
        $image = time() .'.'. $request -> image -> extension();
        $request->image->move(public_path('images'), $image);
      }
      else
      {
        $image=$productImage->image;
      }

      $productImage->update([
        'image_name'=>$request->image_name,
        'image'=>$image,
        'product_id'=>$request->product_id,
        'slug'=>$slug,
      ]);

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

    public function destroy(productImage $productImage)
    {
      $productImage->delete();
      return redirect()->route('images.index');
    }
}

路线/web.php

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('website.shop.layouts.main');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('/dashboard', [App\Http\Controllers\DashboardController::class, 'index'])->name('dashboard.index');

Route::resource('/dashboard/categories', 'App\Http\Controllers\ProductCategoryController');
Route::resource('/dashboard/product', 'App\Http\Controllers\ProductController');
Route::resource('/dashboard/images', 'App\Http\Controllers\ProductImageController');

标签: phplaravelimageupload

解决方案


我解决了这个问题,问题在于路线中的“图像”名称。我在任何地方都将其更改为其他内容,并且现在可以使用。


推荐阅读