我是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');
}
}
答案 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');