我正在尝试使用Laravel整合购物车系统。
以下是添加内容的方式:
public function addItem($itemId, $details = []) {
if(isset(Session::get('cart'))) {
Session::push('cart', ['item_id' => $itemId, 'details' => $details]);
} else {
Session::put('cart', ['item_id' => $itemId, 'details' => $details]);
}
}
我知道如何从购物车中删除所有内容,这很简单:
if(isset(Session::get('cart'))) {
Session::forget('cart');
}
但我不知道如何根据item_id
从购物车中删除特定商品,目前我对此功能的所有内容都是:
public function removeItem($itemId) {
if(isset(Session::get('cart'))) {
} else {
}
}
如何根据子数组中的键item_id
在购物车中取消设置和项目?
答案 0 :(得分:1)
Session
外观具有forget()
功能,可让您从会话中删除项目。很酷的是,它内部调用array_forget
,允许你使用“点”表示法。所以你就是这样做的:
$index = null;
// find out the index of the item to delete
foreach(Session::get('cart') as $i => $item){
if($item['item_id'] == $itemId){
$index = $i;
break;
}
}
// remove by index using the dot notation
if($index != null){
Session::forget('cart.'.$index);
}
此外,您可以使用item_id
作为实际数组键来简化操作。这应该有效:
public function addItem($itemId, $details = []) {
Session::set('cart.'.$itemId, ['item_id' => $itemId, 'details' => $details]);
}
public function removeItem($itemId) {
Session::forget('cart.'.$itemId);
}
答案 1 :(得分:0)
据我所知,目前没有办法删除存储在会话中的数组的值,但你可以尝试workaraound - 从会话加载所有数组,删除数组值并将数组设置回会话。这样的事情应该有效:
public function removeItem($itemId) {
if(isset(Session::get('cart'))) {
$cart = Session::get('cart');
unset($cart[$item_id]);
Session::set('cart', $cart);
} else {
}
}
答案 2 :(得分:-1)
您可以使用array_forget函数删除嵌套数组,但可以使用array_except删除部件,如下所示:
$array = array_except($array, array('keys', 'to', 'remove'));
在你的情况下使用:
Session::array_except('cart', ['item_id', $itemId, 'remove']);
有关详细信息,请访问此链接http://laravel.com/docs/4.2/helpers