从laravel 5中的会话数组中删除元素

时间:2015-04-10 08:45:25

标签: php arrays session laravel laravel-5

我是Laravel 5的新手,并试图通过自己学习来制作电子商务网络应用程序。

我有以下产品系列:

array:2 [▼
  0 => array:4 [▼
    "productId" => 3
    "quantity" => 2
    "productName" => "Testing Product 3"
    "productRate" => 275.0
  ]
  1 => array:4 [▼
    "productId" => 2
    "quantity" => 2
    "productName" => "Testing Product 2"
    "productRate" => 180.0
  ]
]

现在,当用户点击购物车模板视图中的x链接时,它会从会话中删除该产品,但它也会在下一页重新加载时删除完整的会话购物车数组

以下是删除产品的控制器:

public function destroy($id) {

    if ( \Session::has( 'cart' ) && is_array( \Session::get('cart') ) ) {
        $cart = \Session::get('cart');

        for ($i=0; $i < count($cart); $i++) {
            foreach ($cart[$i] as $key => $value) {
                if ( $key === 'product' && $value == $id ) {
                    unset( $cart[$i] );
                }
            }
        }       
        return redirect('/cart')->with('cart', $cart);
    }
}

我也尝试过这样:

unset( $cart[$i][$key] )

但这给了我undefined index错误。

请指导我哪里弄错了,解决方法是什么。

更新1

这是索引函数:

public function index() {
    $cart = \Session::get('cart');
    return view('cart.index')->with('cart', $cart);
}

更新2 : 根据{{​​3}},这是销毁功能:

public function destroy($id) {

    if ( \Session::has( 'cart' ) && is_array( \Session::get('cart') ) ) {
        $cart = \Session::get('cart');

        foreach ($cart as $index => $product) {
            if ($product['productId'] == $id) {
                unset($cart[$index]);
            }
        }
        session(['cart' => $cart]);
        return redirect('/cart');
    }
}

1 个答案:

答案 0 :(得分:0)

我建议您使用foreach代替for来遍历数组。因为如果数组键不是以0开头,或者有任何跳过数组键,如0,1,3,则可能会收到错误。

foreach ($cart as $index => $product) {
  if ($product['productId'] == $id) {
     unset($cart[$index]);
   }
}
session(['cart' => $cart]);

我只是更新代码以将$cart值(删除某些产品后)更新回会话。

<强>更新 with function

之后我们不需要redirect function
return redirect('/cart')->with('cart', $cart);

return redirect('/cart');