尝试在 Laravel 中使用 Gloudemans\Shoppingcart\ 获取非对象的 属性 'img'
Trying to get property 'img' of non-object using Gloudemans\Shoppingcart\ in Laravel
我正在创建一个 Laravel 电子商务网站,我正在使用 Gloudemans\Shoppingcart\ 库。 'Add To Cart' 按钮有问题。我再解释一下!我有一个 singleProduct.blade.php 文件,它从控制器调用产品信息:
这是将数据从数据库传递到视图的函数:
public function show($name)
{
$iamlush = iamlush::where('name', $name)->firstOrFail();
return view('singleProduct')->with('product', $iamlush);
}
这是单一产品文件:
<div class="contentContainer">
<div class="rowContainer text-center">
<div class="productImgContainer">
<img src="{{ asset('img/iamlush/shop/'.$product->img) }}" class="productImg">
</div>
<div class="productInfoContainer">
<div class="text-center">
<div class="productLogoContainer">
<img src="{{ asset('img/logo/'.$product->productLogo) }}" class="logoContainer">
</div>
<h3>{{ $product->name }}</h3>
<h5>{{ $product->priceFormat() }}</h5>
</div>
<p class="descriptionContainer">
{{ $product->description }}
</p>
<div class="rowContainer">
<div class="iconContainer">
<img src="{{ asset('img/productPage/productInfo.png') }}" class="icons">
</div>
<div class="iconContainer">
<img src="{{ asset('img/productPage/paymentMethods.jpg') }}" class="icons">
</div>
</div>
<form action="{{ route('cart.store') }}" method="POST" class="formContainer">
@csrf
<input type="hidden" name="id" value="{{ $product->id }}">
<input type="hidden" name="name" value="{{ $product->name }}">
<input type="hidden" name="price" value="{{ $product->price }}">
<div class="BtnContainer">
<button type="submit" class="btnCart">Add To Cart</button>
</div>
</form>
</div>
</div>
</div>
'Add To Cart' 向 'cart.store' 发送 POST 请求,这是 web.php:
Route::post('/cart', 'CartController@store')->name('cart.store');
这是购物车控制器文件:
public function store(Request $request)
{
Cart::add($request->id, $request->name, 1, $request->price)->associate('App\iamlush');
return redirect()->route('cart.index')->with('success_message', 'Item was added to your cart!');
}
购物车页面分为几个 Laravel 部分。首先是成功添加项目时传递成功消息:
@if (session()->has('success_message'))
<p class="itemAddedContainer">
{{ session()->get('success_message') }}
</p>
@endif
第二个是实际的购物车功能,它检查购物车的计数是否大于 0,即购物车中是否有商品:
@if(\Gloudemans\Shoppingcart\Facades\Cart::count() > 0)
<p class="introTxt">Looks like you have {{ \Gloudemans\Shoppingcart\Facades\Cart::count() }} Let's see what you have in your bag...</p>
<div class="rowContainer">
<!-- holds labels for cart -->
<div class="labelContainer">
<p>Product Image</p>
</div>
<div class="labelContainer">
<p>Name</p>
</div>
<div class="labelContainer">
<p>Quantity</p>
</div>
<div class="labelContainer">
<p>Price</p>
</div>
</div>
这一段之后,在'count() > 0'的@else和@endif之前,是购物车中的@foreach循环:
@foreach( \Gloudemans\Shoppingcart\Facades\Cart::content() as $item)
<div class="productRowContainer">
<!-- holds labels for cart -->
<div class="cartItemContainer">
<img src="{{ asset('img/iamlush/shop/'.$item->model->img) }}" style="width: 30%;">
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<img src="{{ asset('img/logo/'.$item->model->productLogo) }}" class="productLogo">
<p>Mediterranean Dark</p>
</div>
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<div class="quantityContainer">
<button class="quantityBtn">-</button>
</div>
<div class="quantityContainer">
<p>1</p>
</div>
<div class="quantityContainer">
<button class="quantityBtn">+</button>
</div>
</div>
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<p>{{ $item->model->presentprice() }}</p>
</div>
</div>
</div>
@endforeach
@else
<h3>You dont have anything</h3>
@endif
这部分将购物车的内容作为$item,然后用来填充数据。我正在关注这个 youtube 教程:
Laravel 电子商务 - 购物车 - 第 2 部分 ( https://www.youtube.com/watch?v=Jzi6aLKVw-A&list=PLEhEHUEU3x5oPTli631ZX9cxl6cU_sDaR&index=4&t=430s )
在 13:00 分钟,他让它变得动态,当我第一次尝试它时,它对我有用,但后来它突然停止工作,我不明白为什么,它给了我这个错误:
Trying to get property 'img' of non-object
首先,尝试调试您的查询结果
dd($iamlush)
如果没有,请检查您的数据库?你有那个名字的记录吗
可能有两个原因
- 您没有此条件的任何记录
- 你的模型有误
我正在创建一个 Laravel 电子商务网站,我正在使用 Gloudemans\Shoppingcart\ 库。 'Add To Cart' 按钮有问题。我再解释一下!我有一个 singleProduct.blade.php 文件,它从控制器调用产品信息:
这是将数据从数据库传递到视图的函数:
public function show($name)
{
$iamlush = iamlush::where('name', $name)->firstOrFail();
return view('singleProduct')->with('product', $iamlush);
}
这是单一产品文件:
<div class="contentContainer">
<div class="rowContainer text-center">
<div class="productImgContainer">
<img src="{{ asset('img/iamlush/shop/'.$product->img) }}" class="productImg">
</div>
<div class="productInfoContainer">
<div class="text-center">
<div class="productLogoContainer">
<img src="{{ asset('img/logo/'.$product->productLogo) }}" class="logoContainer">
</div>
<h3>{{ $product->name }}</h3>
<h5>{{ $product->priceFormat() }}</h5>
</div>
<p class="descriptionContainer">
{{ $product->description }}
</p>
<div class="rowContainer">
<div class="iconContainer">
<img src="{{ asset('img/productPage/productInfo.png') }}" class="icons">
</div>
<div class="iconContainer">
<img src="{{ asset('img/productPage/paymentMethods.jpg') }}" class="icons">
</div>
</div>
<form action="{{ route('cart.store') }}" method="POST" class="formContainer">
@csrf
<input type="hidden" name="id" value="{{ $product->id }}">
<input type="hidden" name="name" value="{{ $product->name }}">
<input type="hidden" name="price" value="{{ $product->price }}">
<div class="BtnContainer">
<button type="submit" class="btnCart">Add To Cart</button>
</div>
</form>
</div>
</div>
</div>
'Add To Cart' 向 'cart.store' 发送 POST 请求,这是 web.php:
Route::post('/cart', 'CartController@store')->name('cart.store');
这是购物车控制器文件:
public function store(Request $request)
{
Cart::add($request->id, $request->name, 1, $request->price)->associate('App\iamlush');
return redirect()->route('cart.index')->with('success_message', 'Item was added to your cart!');
}
购物车页面分为几个 Laravel 部分。首先是成功添加项目时传递成功消息:
@if (session()->has('success_message'))
<p class="itemAddedContainer">
{{ session()->get('success_message') }}
</p>
@endif
第二个是实际的购物车功能,它检查购物车的计数是否大于 0,即购物车中是否有商品:
@if(\Gloudemans\Shoppingcart\Facades\Cart::count() > 0)
<p class="introTxt">Looks like you have {{ \Gloudemans\Shoppingcart\Facades\Cart::count() }} Let's see what you have in your bag...</p>
<div class="rowContainer">
<!-- holds labels for cart -->
<div class="labelContainer">
<p>Product Image</p>
</div>
<div class="labelContainer">
<p>Name</p>
</div>
<div class="labelContainer">
<p>Quantity</p>
</div>
<div class="labelContainer">
<p>Price</p>
</div>
</div>
这一段之后,在'count() > 0'的@else和@endif之前,是购物车中的@foreach循环:
@foreach( \Gloudemans\Shoppingcart\Facades\Cart::content() as $item)
<div class="productRowContainer">
<!-- holds labels for cart -->
<div class="cartItemContainer">
<img src="{{ asset('img/iamlush/shop/'.$item->model->img) }}" style="width: 30%;">
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<img src="{{ asset('img/logo/'.$item->model->productLogo) }}" class="productLogo">
<p>Mediterranean Dark</p>
</div>
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<div class="quantityContainer">
<button class="quantityBtn">-</button>
</div>
<div class="quantityContainer">
<p>1</p>
</div>
<div class="quantityContainer">
<button class="quantityBtn">+</button>
</div>
</div>
</div>
<div class="cartItemContainer">
<div class="dataContainer">
<p>{{ $item->model->presentprice() }}</p>
</div>
</div>
</div>
@endforeach
@else
<h3>You dont have anything</h3>
@endif
这部分将购物车的内容作为$item,然后用来填充数据。我正在关注这个 youtube 教程:
Laravel 电子商务 - 购物车 - 第 2 部分 ( https://www.youtube.com/watch?v=Jzi6aLKVw-A&list=PLEhEHUEU3x5oPTli631ZX9cxl6cU_sDaR&index=4&t=430s )
在 13:00 分钟,他让它变得动态,当我第一次尝试它时,它对我有用,但后来它突然停止工作,我不明白为什么,它给了我这个错误:
Trying to get property 'img' of non-object
首先,尝试调试您的查询结果
dd($iamlush)
如果没有,请检查您的数据库?你有那个名字的记录吗 可能有两个原因
- 您没有此条件的任何记录
- 你的模型有误