2014-04-25 59 views
0

只是解決了一個問題here,現在另一...寫入會議CakePHP中不保存

正如前面提到的,我下面this tutorial創建使用CakePHP,Ajax和引導一個簡單的購物車。

我知道了,除了爲在大部分看起來雖然這添加到購物車中的項目不保存工作。我可以添加一個項目,移動網站,甚至改變它的數量,它保持原樣 - 但是,當我嘗試添加另一個項目 - 第二個項目只是完全覆蓋第一個項目。

這是增加一個項目時運行CakePHP的車型號功能:

public function addProduct($productId) { 
     $allProducts = $this->read(); 
     if (null!=$allProducts) { 
      if (array_key_exists($productId, $allProducts)) { 
       $allProducts[$productId]++; 
      } else { 
       $allProducts[$productId] = 1; 
      } 
     } else { 
      $allProducts[$productId] = 1; 
     } 

     $this->saveProduct($allProducts); 
    } 


public function saveProduct($data) { 
     return CakeSession::write('cart',$data); 
} 

這是通過在控制器中add函數調用:

public function add() { 
     $this->autoRender = false; 
     if ($this->request->is('post')) { 
      $this->Cart->addProduct($this->request->data['Cart']['product_id']); 
     } 
     echo $this->Cart->getCount(); 
    } 

我的購物車型號看起來像這樣在開始:

<?php 
App::uses('AppModel', 'Model'); 
App::uses('CakeSession', 'Model/Datasource'); 

class Cart extends AppModel {....} 
+2

'$ this-> read()'是什麼? – Ross

+1

爲什麼你使用'CakeSession'而不是[Session Component](http://book.cakephp.org/2.0/en/core-libraries/components/sessions.html)? – Nunser

+0

看起來像一個邏輯錯誤。除非你重新定義了'$ this-> read()' - 當你調用它時,你會得到返回的_one_項的數據。然後用該項目的數據覆蓋會話數據。 @Nunser模型中沒有會話組件;儘管有一個靜態會話接口。 – AD7six

回答

0

已解決:本教程中存在拼寫錯誤,在addProduct函數的開頭應該是readProduct()而不是read()