我已经在会话中添加了一个数组(购物车)。现在要从购物车中删除一个项目,我尝试了这个逻辑。购物车工作正常,我可以在我的页面上看到购物车中的所有商品。删除逻辑不会给我任何错误,但也不会从会话中删除该项。
我做错了什么?
function addToCart(){
$this->layout = false;
$this->render(false);
$cart = array();
$tempcart = unserialize($this->Session->read("cart"));
if(isset($tempcart)){
$cart = $tempcart;
}
$productId = $this->request->data("id");
if(!$this->existsInCart($cart, $productId)){
$cart[] = array("productId" => $productId, "createdAt" => date());
$this->Session->write("cart", serialize($cart));
echo "added";
}
else
echo "duplicate";
}
function removeFromCart(){
$this->layout = false;
$this->render(false);
$cart = array();
$tempcart = unserialize($this->Session->read("cart"));
if(isset($tempcart)){
$cart = $tempcart;
}
$productId = $this->request->data("productId");
for($i=0;$i<count($cart);$i++){
$cartItem = $cart[$i]; // an array
if($cartItem["productId"]==$productId)
unset($cart[$i]);
}
$this->Session->write("cart", serialize($cart));
echo "removed";
}
答案 0 :(得分:1)
$productId = $this->request->data("productId");
您确定要写“productId”而不是“id”吗?
您似乎在添加到购物车期间在请求中发送了“id”,可能您在删除时也是这样做。
此外,您已将购物车保存在$cart
,因此您需要序列化$cart
而不是$newcart
。
因此,您从购物车代码中移除的内容将变为:
function removeFromCart(){
$this->layout = false;
$this->render(false);
$cart = array();
$tempcart = unserialize($this->Session->read("cart"));
if(isset($tempcart)){
$cart = $tempcart;
}
$productId = $this->request->data("id");
for($i=0;$i<count($cart);$i++){
$cartItem = $cart[$i]; // an array
if($cartItem["productId"]==$productId)
unset($cart[$i]);
}
$this->Session->write("cart", serialize($cart));
echo "removed";
}
答案 1 :(得分:1)
您没有使用正确的值更新会话
function removeFromCart() {
$this->layout = false;
$this->render(false);
$productId = $this->request->data("productId");
// make sure this is the value you need
debug($productId);
$tempCart = unserialize($this->Session->read("cart"));
if (!empty($tempCart)) {
for ($i=0; $i<count($tempCart); $i++) {
if ($tempCart[$i]["productId"] == $productId) {
unset($tempCart[$i]);
}
}
$this->Session->write("cart", serialize($tempCart));
}
echo "removed";
}
答案 2 :(得分:1)
为什么你不使用会话组件的delete()功能?
$this->Session->delete('cart');