Я создаю Laravel сайт электронной коммерции и использую библиотеку Gloudemans \ Shoppingcart \. У меня проблема с кнопкой "Добавить в корзину". Я объясню еще немного! У меня есть файл singleProduct.blade. php, и он вызывает информацию о продукте из контроллера:
Это функция, которая передает данные из БД в представление:
public function show($name)
{
$iamlush = iamlush::where('name', $name)->firstOrFail();
return view('singleProduct')->with('product', $iamlush);
}
Это файл singleProduct:
<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>
«Добавить в корзину» отправляет POST-запрос в «cart.store», и это Интернет. 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, т.е. the cart:
@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>
После этого раздела перед @else и @endif для count ()> 0 находится @foreach l oop в корзине:
@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
Этот раздел принимает содержимое корзины как элемент $ и затем используется для заполнения данных. Я следую этому руководству на YouTube:
Laravel Электронная коммерция - Корзина - Часть 2 (https://www.youtube.com/watch?v=Jzi6aLKVw-A&list=PLEhEHUEU3x5oPTli631ZX9cxl6cU_sDaR&index=4&t=430s)
Он делает это в 13.00 минут. Dynami c, и когда я впервые попробовал его, у меня это сработало, но затем оно перестало работать внезапно, и я не могу понять, почему, и это выдавало мне эту ошибку:
Trying to get property 'img' of non-object