2013-10-15 50 views
0

我正在製作使用Silex創建的非常原始的購物卡和MVC。我有一個JS/AJAX問題。我正在嘗試將產品提交給購物籃。麻煩的是,它提交了詳細信息,在會話中設置了它們,並且工作正常。當您添加第二個產品時,它將替換產品而不是將其附加到數組中。我嘗試了一些不同的東西,但沒有成功。 (代碼如下)。Silex:向會話助手添加新值

乾杯,

伊萬

路由器採用ajax的值:

$app->get('/add/to/cart/{id}/{name}/{price}', function($id, $name, $price) use ($app) { 

$basket[] = array (
    'id' => $id, 
    'name' => $name, 
    'price' => $price 
); 

$app['session']->set('basket', $basket); 

return new Response("Added to basket."); 

}); 

這裏的JavaScript的

$('.add-to-cart').on("click", function() { 

$productId = $(this).attr('product-id'); 
$productName = $(this).attr('product-name'); 
$productCost = $(this).attr('product-cost'); 

$.ajax({ 
     type: "GET", 
     url: "http://localhost/php/Test/web/index.php/add/to/cart/"+$productId+"/"+$productName+"/"+$productCost, 
     data: { 
      // Doesn't need the data, Silex takes it from the url 
     }, 
     success: function() { 
      // Just to check it worked 
      console.log("add/to/cart/"+$productId+"/"+$productName+"/"+$productCost); 
     }, 
     error: function() { 

     } 
    }); 
}); 

回答

1

您需要首先獲取當前籃筐。添加到您的函數的開頭:

$basket = $app["session"]->get("basket", array()); 

第二個參數是默認值,如果沒有這樣的關鍵在會話存在它的返回。這樣你在這種情況下得到一個空數組。

+0

我不得不使用一個array_merge,但現貨!謝謝你,現在看起來很明顯。你爲我節省了很多時間! –