所以我按照这个例子来看一个绝对的发球台:http://www.startutorial.com/articles/view/build-a-shopping-cart-with-cakephp-and-jquery-part-2
但是它给了我一个错误:
Warning (2): Invalid argument supplied for foreach() [APP\Model\Cart.php, line 38]
涉及到:
public function getCount() {
$allProducts = $this->read();
if (count($allProducts)<1) {
return 0;
}
$count = 0;
foreach ($allProducts as $product) {
debug($product);
$count=$count+$product;
}
return $count;
}
更令人愤怒的是,首先它正常运作。然后发生了一些事情,我不知道是什么。它现在拒绝工作。我的数据库是正确的,一切都是正确的。
我只是不明白我已经被困在这几个小时了
而且,每当我试图访问我的购物车(CartsController)时它必须是相关的,它给了我:
Error: syntax error, unexpected 'class' (T_CLASS)
这是一张所有内容的图片,当我点击添加到购物车时,abovwe的错误线。当我点击购物车时,它会让我得到关于意外课程的snytax错误
Cart.php
<?php
App::uses('AppModel', 'Model');
App::uses('CakeSession', 'Model/Datasource');
class Cart extends AppModel {
public $useTable = false;
/*
* add a product to cart
*/
public function add($productId) {
$allProducts = $this->read();
if (null!=$allProducts) {
if (array_key_exists($productId, $allProducts)) {
$allProducts[$productId]++;
} else {
$allProducts[$productId] = 1;
}
} else {
$allProducts[$productId] = 1;
}
$this->save($allProducts);
}
/*
* get total count of products
*/
public function getCount() {
$allProducts = $this->find('all');
if (count($allProducts)<1) {
return 0;
}
$count = 0;
foreach ($allProducts as $product) {
$count=$count+$product;
}
return $count;
}
/*
* save data to session
*/
public function save($data) {
return CakeSession::write('cart',$data);
}
/*
* read cart data from session
*/
public function read() {
return CakeSession::read('cart');
}
}
答案 0 :(得分:2)
你似乎在混淆模型方法。 read() method用于从数据模型中读取单行(通常是数据库表),因为它需要id,可以通过将其设置为模型来实现:
$this->id = 2;
$this->read();
或者将其设置为第二个参数:
$this->read(null, 2);
但是,从它的外观来看,你试图获取所有产品的数量,使用find('count') method可以更简单地获得。你的模型方法可以像这样瘦:
public function getCount() {
return $this->find('count');
}
应该给你想要的结果。