cakePHP在default.ctp上显示购物车

cakePHP在default.ctp上显示购物车,cakephp,cakephp-2.2,Cakephp,Cakephp 2.2,我有一个标准的cakePHP 2.2安装,希望在主页上显示一个购物车,它是一个cookie,存储映射到数量的ProductID数组。cookie设置正确,我已经验证过了 我可以从cookie数组中检索ID,现在需要从数据库中获取产品名称、价格和内容,以便将它们呈现给用户,而不是一串ID 我的印象是,我应该在AppController.php文件中执行此操作,并具有以下代码。但这给了我下面的错误。getData()是我的ProductController.php类中的一个方法。我尝试过使用$use

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

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

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

Product->getData()返回产品的数据库行。我将在default.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 
编辑 发生这种情况是因为我错误地尝试在ProductsController.php中设置getData()方法。我应该试着在模型中,而不是控制器中实现这个功能。我把它改为使用$this->Product->findById(),因为这正是我想要的

产品模型不是您的产品模型 如果对不存在的模型调用方法,则会将其作为查询传递给db:

$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"
产品模型不是您的产品模型 如果对不存在的模型调用方法,则会将其作为查询传递给db:

$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"

调试(获取类($this->Product));呼应“产品”。my ProductController.php文件中的getData函数如下所示:公共函数getData($id=null){if(!$id){throw new NotFoundException(uuuu('Invalid product');}$product=$this->product->findById($id);if(!$product){throw new NotFoundException(_uu('Invalid product'));}return$product;}“my ProductController.php中的getData函数”-那么产品模型没有方法
getData
。这是另一个类-您的产品模型不是您的产品控制器(还请注意,控制器以复数形式命名为“产品”)。你为什么不直接使用
findById
包装器方法是非常稀疏的。顺便说一句,使用这样的异常(取决于你如何处理它)可能是一个巨大的问题。如果用户确实设法在购物车中获得了一个无效的产品(他们添加了一个被删除的产品,应用程序错误等等)调试(get_class($this->Product));回显“Product”。my ProductController.php文件中的getData函数如下所示:公共函数getData($id=null){if(!$id){throw new NotFoundException('Invalid Product'));}$product=$this->product->findById($id);if(!$product){throw new NotFoundException(u u('Invalid product'));}return$product;}“my ProductController.php中的getData函数”-那么产品模型没有方法
getData
。这是另一个类-您的产品模型不是您的产品控制器(还请注意,控制器以复数形式命名为“产品”)。你为什么不直接使用
findById
包装器方法是非常稀疏的。顺便说一句,使用这样的异常(取决于你如何处理它)可能是一个巨大的问题。如果用户确实设法在购物车中获得了一个无效的产品(他们添加了一个被删除的产品,应用程序错误等等)-你让他们什么都做不到。