为foreach()CakePHP提供了无效的参数

时间:2014-04-05 16:17:26

标签: cakephp

所以我按照这个例子来看一个绝对的发球台: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错误

Picture of problem

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');
    }

}

1 个答案:

答案 0 :(得分:2)

你似乎在混淆模型方法。 read() method用于从数据模型中读取单行(通常是数据库表),因为它需要id,可以通过将其设置为模型来实现:

$this->id = 2;
$this->read();

或者将其设置为第二个参数:

$this->read(null, 2);

但是,从它的外观来看,你试图获取所有产品的数量,使用find('count') method可以更简单地获得。你的模型方法可以像这样瘦:

public function getCount() {
    return $this->find('count');
}

应该给你想要的结果。