2015-04-10 6 views
0

Я новичок в 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.

Просьба направлять меня, где я совершил ошибку, и каково ее решение.

UPDATE 1:

Вот функция индекс:

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

UPDATE 2: Согласно discussion, Вот уничтожить функции:

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

Какое значение '$ id'? Это 'productId' или' Array Index'? – mininoz

+0

это 'productId' –

ответ

0

Я предлагаю вы должны использовать foreach вместо for для циклического перемещения по массиву. Потому что вы можете получить ошибку, если ключ массива не запускается с 0 или есть какой-либо ключ массива skip, например 0,1,3.

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

Я просто обновить код для обновления значения $cart (после отсоединения какого-либо продукта) назад к сессии.

Update Нам не нужно with function после redirect function

return redirect('/cart')->with('cart', $cart); 

в

return redirect('/cart'); 
+0

Что он будет делать? Я пробовал свой код, и я получил: перезагрузка страницы с тем же сеансом, а затем на загрузку следующей страницы, никаких данных в сеансе. –

+0

Вы отказались от строки 'unset'? Я только что обновил свой код. – mininoz

+0

Пробовал снова, на этот раз это сработало, но при повторной загрузке страницы сеанс исчез. Я имею в виду, что продуктов не было вообще. –

Смежные вопросы