2016-07-13 10 views
0

Ich benutze CakePHP 3.2 zum Schreiben einer Warenkorb-Anwendung.CakePHP 3: Array aus Cookie löschen und aktualisieren

Ich verwende Cookies, um Artikel zum Warenkorb hinzuzufügen.

Jetzt möchte ich den Wert aus dem Warenkorb aktualisieren und löschen. Wenn der Benutzer auf das gleiche Produkt add to cart mit einem anderen quantity Wert klickt, wird der vorhandene Datensatz gelöscht und neue werden zum Warenkorb hinzugefügt.

Dies ist meine addToCart() Methode.

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()); 
    } 

    } 
} 

Aber dies gibt Fehler als

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

Wie kann ich die Menge Wert im Warenkorb aktualisieren.

+0

was ist in der Leitung 148? – claudios

+0

Nehmen Sie ein Beispiel: Ich habe bereits product_id (1) und Menge (3). Jetzt haben Sie die Funktion addToCart() mit der gleichen product_id aufgerufen, jetzt wollen Sie die Menge überschreiben oder (alte Menge + aktuelle Menge). Lass es mich wissen –

+0

@claudios Ich habe die Zeile 148 im Code markiert. –

Antwort

1

Versuchen Sie Folgendes:

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

Danke. Es funktioniert gut. Aber wie in Ihrer Editierung erwähnt '// Entfernen Sie den Artikel aus dem Warenkorb'. Wie man Artikel aus dem Warenkorb entfernt Ich weiß 'delete' wird dies tun, aber wie man bestimmte Arrays löscht. In meiner Frage habe ich versucht, $ this-> Cookie-> delete ('Cart.'. $ Cart_item) 'aber dies gibt Fehler –

+1

Willkommen. Sie können versuchen, senden Sie die Produkt-ID und die Menge ist Null. Dann wird es aus dem Warenkorb entfernt. Weil ich in $ new_cart das bestimmte Element nicht hinzugefügt habe. –

+0

Wenn Sie den gesamten Warenkorb löschen, verwenden Sie "$ this-> Cookie-> delete ('Cart')". Warum haben Sie Fehler bedeutet, "'Cart.'. $ Cart_item" es dauert als Variable und mehr über wir nicht die Variable verwenden, werden wir nur "Warenkorb" verwenden –