Проверка Laravel существует в массиве сессий - PullRequest
0 голосов
/ 27 августа 2018

Я делаю корзину для покупок Laravel и теперь работаю с сессией Laravel.
Я представляю себе:

  1. Если сессия корзины пуста :
    Добавление первого товара
  2. Если нет :
    Проверьте запрос идентификатора продукта, если он не существует идентификатора продукта:
    -> перенести в корзину массив сессий
    Если нет :
    -> не выдвигать в корзину массив сессий

Я могу отправить продукт в сеанс, но с первым продуктом, когда я добавляю еще один продукт, он был добавлен, но 2-й, 3-й ... продукт работает нормально.
Я стараюсь много раз, но не нашел способ решить. Вы можете мне помочь?
Это мой CartController с методом добавления *

public function add(Request $request)
{
  $cartItems = session('cart');
  $productInfoToCart = array(
    "id" => request('id'),
    "name" => request('name'),
    "code" => request('code'),
    "price" => request('price')
  );
  if ($cartItems !== null){
    if (array_search(request('id'), array_column($cartItems, 'id'))) {
      return redirect ('/cart')->with('status', 'Product exists, you can change quantity before payment');
    } else {
    $request->session()->push('cart', $productInfoToCart);
    $request->session()->flash('status', 'Product added to cart');

    return redirect('/cart');
    }
  } else {
    $request->session()->push('cart', $productInfoToCart);
    $request->session()->flash('status', 'First Product added to cart');

    return redirect('/cart');
  }
}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Наконец-то я нашел способ решить, просто отредактируйте эту строку:

if (array_search(request('id'), array_column($cartItems, 'id')))  

до:

if (array_search(request('id'), array_column($cartItems, 'id')) !== false)  

потому что, возможно, старая строка вернет ключ поиска, а не логический результат, поэтому я не смог выполнить следующую логическую команду.

0 голосов
/ 27 августа 2018

Вы должны создать класс Cart и не кодировать логику корзины в контроллере. Вы храните данные в сеансах, но завтра вы можете хранить их где-то еще, и этот код больше не будет работать, поэтому постарайтесь не связывать логику с системой хранения.

Вы также можете легко упростить свой код (бесполезно «если еще», когда вы используете в нем возвратную статистику)

public function add()
{
    $cartItems = session('cart');
    $productInfoToCart = array(
      "id" => request('id'),
      "name" => request('name'),
      "code" => request('code'),
      "price" => request('price')
    );
    if ($cartItems !== null){
        if (isset($cartItems[request('id')]){
            return redirect ('/cart'); //...
        }
        $cartItems[request('id')] = $productInfoToCart;
        $request->session()->put('cart', $cartItems);
        $request->session()->flash('status', 'Product added to cart');   
        return redirect('/cart');
    }
    $cartItems[request('id')] = $productInfoToCart;
    $request->session()->put('cart', $cartItems);
    $request->session()->flash('status', 'First Product added to cart');
    return redirect('/cart');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...