2016-07-13 3 views
0

Я использую CakePHP 3.2 для написания приложения корзины покупок.CakePHP 3: удалить и обновить массив из файла cookie

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

Теперь я хочу обновить и удалить значение из корзины. так что если пользователь нажмет на тот же продукт add to cart с другим значением quantity, то существующая запись будет удалена, а новые будут добавлены в корзину.

Это мой метод addToCart().

public function addToCart() 
{ 
    $this->loadModel('Products'); 

    if ($this->request->is('post')) { 
    $p_id = $this->request->data('product_id'); 
    $p_quantity = $this->request->data('qnty'); 

$product = $this->Products->get($p_id); 

$product->quantity = $p_quantity; 

if (!$product) { 
    throw new NotFoundException(__('Invalid Product')); 
} 

    $cart = $this->Cookie->read('Cart') ? $this->Cookie->read('Cart') : []; 

    $itemInCart = false; 
    $itemUpdated = false; 
    if ($cart != null) { 
    foreach($cart as $cart_item): 
     if ($cart_item['id'] == $p_id) { 
     if ($cart_item['quantity'] != $p_quantity) { 
      $this->Cookie->delete('Cart.'.$cart_item); // line 148 
      $cart[] = $product; 
      $this->Cookie->write('Cart', $cart); 
      $itemsCount = count($this->Cookie->read('Cart')); 
      $this->Flash->success('Product updated in cart'); 
      return $this->redirect($this->referer); 
     } 
     $itemInCart = true; 
     } 
    endforeach; 
    } 

    if (!$itemInCart) { 
    $cart[] = $product; 
    $this->Cookie->write('Cart', $cart); 

    $itemsCount = count($this->Cookie->read('Cart')); 

    if ($itemUpdated) { 
     $this->Flash->success(__('Product updated in cart')); 
    } else { 
     $this->Flash->success(__('Product added to cart')); 
    } 

    return $this->redirect($this->referer()); 
    } else { 
    $this->Flash->success(__('Product is already in cart')); 
    return $this->redirect($this->referer()); 
    } 

    } 
} 

Но это дает ошибку как

Notice (8): Array to string conversion [APP/Controller/OrdersController.php, line 148] 

Как я могу обновить значение количества в корзине.

+0

что в строке 148? – claudios

+0

Пример: у меня уже есть product_id (1) и количество (3). Теперь вы вызвали функцию addToCart() с тем же product_id, теперь вы хотите переписать количество или (oldquantity + current quantity). Дайте мне знать –

+0

@claudios Я выделил строку 148 в коде. –

ответ

1

Попробуйте следующее:

public function addToCart() 
{ 
    $this->loadModel('Products'); 

    if ($this->request->is('post')) { 
     $p_id = $this->request->data('product_id'); 
     $p_quantity = $this->request->data('qnty'); 

     $product = $this->Products->get($p_id); 

     if (!$product) { 
      throw new NotFoundException(__('Invalid Product')); 
     } 

     $product->quantity = $p_quantity; 

     $cart = $this->Cookie->read('Cart') ? $this->Cookie->read('Cart') : []; 

     $itemInCart = false; 
     $new_cart = []; 
     if ($cart != null) { 
      foreach($cart as $cart_item):    
       if ($cart_item['id'] == $p_id) {      
        if($p_quantity == 0){ 
         //Removed the item from cart and set itemInCart to true 
         $itemInCart = true; 
        }else{ 
         //update the quantity of item 
         $new_cart[] = $product; 
         $itemInCart = true; 
        }     
       }else{ 
        $new_cart[] = $cart_item; 
       } 
      endforeach; 
     } 

     if ($itemInCart) {  
      $this->Cookie->write('Cart', $new_cart); 
      $this->Flash->success(__('Product updated in cart')); 
     } else { 
      $cart[] = $product; 
      $this->Cookie->write('Cart', $cart); 
      $this->Flash->success(__('Product added to cart')); 
     } 
     return $this->redirect($this->referer); 
    } 
} 
+0

Спасибо. Он работает нормально. Но, как упоминалось в вашем edit '// Удалить элемент из корзины'. Как удалить товар из корзины. Я знаю, что 'delete' будет делать это, но как удалить определенный массив. В моем вопросе я попытался «$ this-> Cookie-> delete ('Cart.'. $ Cart_item)', но это дает ошибку –

+1

Добро пожаловать. Вы можете попробовать отправить идентификатор продукта, а количество равно нулю. Затем он будет удален из корзины. Потому что в $ new_cart я не добавил конкретный элемент. –

+0

Если вы удалите всю корзину, вы будете использовать «$ this-> Cookie-> delete (« Cart »)». Почему у вас есть ошибка, «Корзина». $ Cart_item «требуется переменная и больше, мы не используем эту переменную, мы будем использовать только« Корзина » –