php - 在 Laravel 中,我无法检索上传的图像。我创建了存储链接。但它不会工作。我错过了什么吗?
问题描述
图像显示为“图像描述”。如何检索数据库中的图像?除了图像之外,所有的工作都很顺利。
这是我的第一个项目。我找不到问题。有人可以帮忙解决吗?
这是我的index.blade.php
<ul class="list-group list-group-horizontal-sm position-relative z-index-2 flex-row overflow-auto overflow-md-visble">
@foreach($products as $p)
<li class="list-group-item py-2 px-3 px-xl-4 px-wd-5 flex-horizontal-center shadow-on-hover-1 rounded-0 border-top-0 border-bottom-0 flex-shrink-0 flex-md-shrink-1">
<a href="../shop/product-categories-7-column-full-width.html" class="d-block py-2 text-center">
<img class="img-fluid mb-1 max-width-100-sm" src="/storage/admin/{{ $p ['prod_image_path'] }}" alt="Image Description">
<h6 class="font-size-14 mb-0 atext font-weight-semi-bold">{{ $p ['prod_name'] }}</h6>
<h6 class="font-size-14 mb-0 atext font-weight-semi-bold">{{ $p ['prod_price'] }}</h6>
</a>
</li>
<li class="list-group-item py-2 px-3 px-xl-4 px-wd-5 flex-horizontal-center shadow-on-hover-1 rounded-0 border-top-0 border-bottom-0 flex-shrink-0 flex-md-shrink-1">
<a href="../shop/product-categories-7-column-full-width.html" class="d-block py-2 text-center">
<img class="img-fluid mb-1 max-width-100-sm" src="/storage/admin/{{ $p ['prod_image_path'] }}" alt="Image Description">
<h6 class="font-size-14 mb-0 atext font-weight-semi-bold">{{ $p ['prod_name'] }}</h6>
<h6 class="font-size-14 mb-0 atext font-weight-semi-bold">{{ $p ['prod_price'] }}</h6>
</a>
</li>
@endforeach
</ul>
这是我的产品控制器。
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Product;
use App\Category;
class ProductsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
$arr['products'] = Product::all();
return view('admin.products.index')->with($arr);
}
public function create()
{
return view('admin.products.create');
}
public function store(Request $request, Product $product, Category $category)
{
if($request->prod_image_path->getClientOriginalName())
{
$ext =$request->prod_image_path->getClientOriginalName();
$file = date('YmdHis').rand(1,99999).'.'.$ext;
$request->prod_image_path->storeAs('public/admin',$file);
}else{
$file ='';
}
$product-> prod_name = $request-> prod_name;
$product-> prod_meta_title = $request-> prod_meta_title;
$product-> prod_description = $request-> prod_description;
$product-> prod_category = $request-> prod_category;
$product-> prod_price = $request-> prod_price;
$product-> prod_discount = $request-> prod_discount;
$product-> prod_image_path = $file;
$product->save();
return redirect()->route('admin.products.index');
}
public function show($id)
{
$product = Product::find($id);
return view ('user.show',['product'=>$product]);
}
public function edit(Product $product)
{
$arr['product'] = $product;
return view('admin.products.edit')->with($arr);
}
public function update(Request $request, Product $product)
{
if($request->prod_image_path->getClientOriginalName())
{
$ext =$request->prod_image_path->getClientOriginalName();
$file = date('YmdHis').rand(1,99999).'.'.$ext;
$request->prod_image_path->storeAs('public/admin',$file);
}else{
$file ='';
}
$product-> prod_name = $request-> prod_name;
$product-> prod_meta_title = $request-> prod_meta_title;
$product-> prod_description = $request-> prod_description;
$product-> prod_category = $request-> prod_category;
$product-> prod_price = $request-> prod_price;
$product-> prod_discount = $request-> prod_discount;
$product-> prod_image_path = $file;
$product->save();
return redirect()->route('admin.products.index');
}
public function destroy($id)
{
Product:: destroy($id);
return redirect()->route('admin.products.index');
}
}
而我的图片路径如下图。
解决方案
最好的方法是使用 Model 类上的 setter 方法获取图像,该方法返回完整路径或 null(如果没有图像)
产品.php
<?php
use Storage;
class Product extends Model
{
// .. other information.
public function getProdImagePathAttribute(){
return $this->attributes['prod_image_path'] ? Storage::url('admin/'.$this->attributes['prod_image_path']) : null;
}
}
products.blade.php
@if($p['prod_image_path'])
<img class="img-fluid mb-1 max-width-100-sm" src="{{URL::asset($p['prod_image_path'])}}"" alt="Image Description">
@else
<img src="{{URL::asset('admin/default-product.jpg')}}" alt="default-pic">
@endif
推荐阅读
- c# - Unity:停止角色上山(最后位置和当前位置之间的角度?!)
- scala - 如何在scala中访问spark数据框的列索引以进行计算
- mysql - SUBQUERY 和 INNER JOIN - MySQL 和 SQL 之间的区别
- coldfusion - ColdFusion RecordCount 作为多个条件
- matlab - Matlab中的拉格朗日插值问题
- java - 模糊的 SharedPreference ,BadPaddingException:垫块损坏
- javascript - 在nwjs中下载文件时如何显示进度条
- angular - 在进行一些更改后,将 Angular 5 升级到 6 应用程序在开发模式下工作,但在构建生产后无法工作
- php - Woocommerce 股票的 Wordpress 更新帖子元
- javascript - 如何将 querySelectorAll 与变量一起使用?