蛋糕PHP在default.ctp上显示购物车



我有一个标准的cakePHP 2.2安装,并希望在主页上显示一个购物车,这是一个cookie,存储映射到数量的产品ID数组。cookie 设置正确,我已经验证了。

我可以从 cookie 数组中检索 ID,现在需要从数据库中获取产品名称、价格和东西,以便将它们呈现给用户,而不是一串 ID。

我的印象是我应该在我的AppController.php文件中执行此操作,并具有以下代码。但这给了我下面的错误。getData() 是我的 ProductController.php 类中的一个方法。我尝试使用$uses和使用$this->loadModel,但似乎都不起作用。

Product->getData() 基本上返回产品的数据库行。我将在我的默认.ctp文件中格式化它。正确的方法是什么?

class AppController extends Controller {
    public $components = array('Cookie', 'Session');
    //public $uses = array('Product');
    function beforeFilter() {
        $this->loadModel('Product');
        $cookieCartVar = $this->Cookie->read('Cart');
        $this->set('cookieCart', $cookieCartVar);
        $p = array();
        if (count($cookieCartVar) > 0) {
            foreach ($cookieCartVar as $prodId => $qty) {
                $p[] = $this->Product->getData($prodId);
            }
        }
        $this->set('cookieProducts', $p);
    }       
}
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'getData' at line 1
SQL Query: getData 

编辑

发生这种情况是因为我错误地尝试在产品控制器.php中设置 getData() 方法。我应该尝试在模型中制作这个函数,而不是控制器。无论如何,我将其更改为使用$this->Product->findById(),因为这是我想要的。

产品型号不是您的产品型号

如果在不存在的模型上调用方法,它将作为查询传递给数据库:

$someModel->woopWoop(); // executes `woopWoop`

错误说:

错误: SQLSTATE[42000]: 语法错误或访问冲突: 1064 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的"getData"附近使用的正确语法

因此,您使用getData调用的模型不是具有名为 getData 的方法的模型。

要么你想从插件加载模型,但有一个 AppModel 的实例;在这种情况下,你应该这样做:

$this->loadModel('MyPlugin.Product');

或者实例属于正确的类,但它根本没有方法 getData .您可以通过简单地执行以下操作来检查哪个:

debug(get_class($this->Product)); // outputs e.g. "Product" or "AppModel"

最新更新