为啥我的 $items 没有一组 $item? Laravel 8 电子商务
Posted
技术标签:
【中文标题】为啥我的 $items 没有一组 $item? Laravel 8 电子商务【英文标题】:Why is my $items doesn't hold a group of $item? Laravel 8 Ecommerce为什么我的 $items 没有一组 $item? Laravel 8 电子商务 【发布时间】:2021-04-06 01:21:48 【问题描述】:我来自同一个帖子here,但我找到了根本问题,为什么我的数量不会增加,但我不知道如何解决这个问题。问题出在我的 isset 函数(在 Cart.php 中),因为我试图在那里回显某些内容,但刚刚意识到该函数没有运行。这是我在 if($this->items) 中删除 isset 函数时弹出的error。我也试过 dd($items) ,它说空。为什么我的 $item 没有持有一组 $item?你们知道为什么以及如何解决这个问题吗?
p/s:从上一篇文章中,我删除了我的 $oldCart 并用 $cart 替换它,我希望 $cart 会覆盖它自己。 这些都是与我的购物车相关的代码。
在购物车.php 中
<?php
namespace App\Models;
class Cart
public $items = array();
public $totalQty = 0;
public $totalPrice = 0;
public function __construct($cart)
if ($cart)
//dd($this);
$this->items = $cart->items;
$this->totalQty = $cart->totalQty;
$this->totalPrice = $cart->totalPrice;
public function add($item, $id)
global $cart;
global $items;
//default values if item not in cart
$storedItem = [
'qty' => 0,
'price' => $item->price,
'item' => $item
];
//if item is already in shopping cart
if ($this->$items)
if (array_key_exists($id, $this->items))
$storedItem = $this->items[$id];
//dd($items);
$storedItem['qty']++;
$storedItem['price'] = $item->price * $storedItem['qty'];
$this->items[$id] = $storedItem;
$this->totalQty++;
$this->totalPrice += $item->price;
在 FoodController.php 中
<?php
namespace App\Http\Controllers;
use App\Models\Cart;
use App\Models\Food;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
class FoodController extends Controller
public function addtoCart(Request $request, $id, Food $foods)
$foods = Food::find($id);
//check in session if cart already contains product
$cart = Session::has('cart') ? Session::get('cart') : null;
//dd($cart);
//if it did contain products, pass them to constructor
if (!$cart)
$cart = new Cart($cart);
$food = $foods->id;
$cart->add($foods, $food);
Session::put('cart', $cart);
//dd($request->session()->get('cart'));
return view('cart', ['food' => $cart->items, 'totalPrice' => $cart->totalPrice]);
public function getCart()
if (!Session::has('cart'))
return view('cart');
$cart = Session::get('cart');
$cart = new Cart($cart);
return view('cart', ['food' => $cart->items, 'totalPrice' => $cart->totalPrice]);
在 cart.blade.php 中
@foreach ($food as $foods)
<p align="left"><a href="#"> $foods['item']['name'] </a> <span class="price">MYR $foods['price'] </span></p>
<p align="left">Quantity</p>
<p><input class="w3-input w3-p-adding-16 w3-border" type="number" placeholder="Quantity" value=" $foods['qty'] " required name="quantity"></p>
@endforeach
<hr>
<p align="left">Total <span class="price"><b>MYR $totalPrice </b></span></p>
【问题讨论】:
【参考方案1】:我认为你需要在Cart类中重新定义你的add函数是这样的,有一些语法错误,(删除$
符号形式$this->$items
),不需要重新声明函数中的 $cart & $items
public function add($item, $id)
//default values if item not in cart
$storedItem = [
'qty' => 0,
'price' => $item->price,
'item' => $item
];
//if item is already in shopping cart
if (isset($this->items) ? $this->items : false)
if (array_key_exists($id, $this->items))
$storedItem = $this->items[$id];
//dd($items);
$storedItem['qty']++;
$storedItem['price'] = $item->price * $storedItem['qty'];
$this->items[$id] = $storedItem;
$this->totalQty++;
$this->totalPrice += $item->price;
【讨论】:
它有效!非常感谢!但是$items 和$this->items 有什么区别呢?我不明白错误期间发生了什么 欢迎使用,$this->items 指的是当前对象变量,$items 指的是在同一个作用域中声明的变量。并且您已经在构造函数中初始化了对象变量 啊我明白了,我现在明白了,再次感谢您的时间:))【参考方案2】:您得到的错误是因为您尝试从 $this 购物车对象获取属性的方式。
第 39 行的更改(在 add 方法内):
if (isset($this->$items) ? $items : false)
收件人:
$this->items
因为按照您当前定义它的方式,它会尝试访问 $this 上具有变量 $items 的值的属性, 在你的条件里面。
这也是错误指向 Cart::$ 的原因,因为 items 作为变量在那个时间点没有任何值。
【讨论】:
我得到的错误是在我删除 isset 之后。如果我在那里添加 isset,我可以运行我的网站,但我无法增加数量。很抱歉,我忘记在我的帖子中删除 isset。以上是关于为啥我的 $items 没有一组 $item? Laravel 8 电子商务的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 IF 不返回组件 <Item_burger />?
在 CSS Flexbox 中,为啥没有“justify-items”和“justify-self”属性?