Попытка получить свойство img не-объекта с помощью Gloudemans \ Shoppingcart \ in Laravel - PullRequest
0 голосов
/ 21 июня 2020

Я создаю 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

1 Ответ

0 голосов
/ 21 июня 2020

Сначала попробуйте отладить результат вашего запроса

dd($iamlush)

, если он равен нулю, проверить вашу базу данных? есть ли у вас какие-либо записи с этим именем, может быть две причины

  1. у вас нет записи для этого условия
  2. у вас есть ошибка в вашей модели
...