[英]Laravel 8 Can't change image with input form
我正在尝试通过用新图像替换图像来更新我的 laravel 项目,但由于某种原因它无法正常工作。 当我发布新帖子时,我添加的图像会显示出来,但是当我更新图像时它不会改变。 当我更新我的图像帖子时,图像文件也不会显示在 laravel 文件夹中。 我正在使用 laravel 8。
PRODUCTSCONTROLLER.PHP
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductsController extends Controller
{
public function edit($id){
$product = Product::findOrFail($id);
return view('products.edit', ['product' => $product]);
}
public function update(Request $request, $id){
request()->validate([
'product_name' => ['required', 'min:2', 'max:50'],
'product_price' => 'required',
'product_desc' => ['required', 'min:2', 'max:300'],
'product_img' => 'image|nullable|max:1999'
]);
// Handle File Upload
if($request->hasFile('product_img')){
// Get filename with the extension
$filenameWithExt = $request->file('product_img')->getClientOriginalName();
// Get just filename
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
// Get just ext
$extension = $request->file('product_img')->getClientOriginalExtension();
// Filename to store
$fileNameToStore= $filename.'_'.time().'.'.$extension;
// Upload Image
$path = $request->file('product_img')->storeAs('public/uploads', $fileNameToStore);
}
$product = Product::findOrFail($id);
$product->product_name = request('product_name');
$product->product_price = request('product_price');
$product->product_desc = request('product_desc');
if($request->hasFile('product_img')){
$product->product_img = $fileNameToStore;
}
$product->save();
return redirect('/products');
}
}
EDIT.BLADE.PHP
<div class="product-wrapper">
<div class="container">
<form method="POST" action="/products/{{$product->id}}">
@csrf
@method('PUT')
<div class="form-row">
<div class="col-md-6">
<label for="product-name">Toote nimi</label>
<input type="text" class="form-control {{ $errors->has('product_name') ? 'alert-danger' : '' }}" name="product_name" id="product-name" placeholder="" value="{{ $product->product_name }}" required>
</div>
</div>
<div class="form-row">
<div class="col-md-6">
<label for="product-desc">Toote hind</label>
<input type="text" class="form-control {{ $errors->has('product_price') ? 'alert-danger' : '' }}" name="product_price" id="product-price" placeholder="" value="{{ $product->product_price }}" required>
</div>
</div>
<div class="form-row">
<div class="col-md-6">
<input type="file" name="product_img">
</div>
</div>
<div class="form-row">
<div class="col-md-6">
<label for="product-desc">Toote kirjeldus</label>
<textarea class="form-control {{ $errors->has('product_desc') ? 'alert-danger' : '' }}" name="product_desc" id="product-desc" required>{{ $product->product_desc }}</textarea>
</div>
</div>
<input type="submit" class="btn btn-primary" value="submit">
</form>
</div>
</div>
WEB.PHP
Route::get('/products/edit/{product}', [\App\Http\Controllers\ProductsController::class,'edit'])->middleware('auth');
Route::put('/products/{product}', [\App\Http\Controllers\ProductsController::class,'update'])->middleware('auth');
您必须使用multipart/form-data
的值将enctype
属性添加到更新form
以允许文件上传(在您的情况下为图像),您将拥有类似<form method="POST" action="/products/{{$product->id}}" enctype="multipart/form-data">...</form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.