2016-07-13 10 views
0

私はショッピングカートアプリケーションの作成にCakePHP 3.2を使用しています。CakePHP 3:クッキーから配列を削除して更新する

私はクッキーを使って商品をカートに追加しています。

今すぐカートから価値を更新して削除したいと考えています。ユーザーが同じ製品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)とquantity(3)を持っています。これで、同じproduct_idでaddToCart()関数を呼び出しました。次に、数量または(古い数量+現在の数量)を上書きします。 –

+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

ありがとうございます。それは正常に動作しています。しかし、あなたの編集で述べたように '/ /アイテムをカートから削除する'。カートからアイテムを取り除く方法。私は 'delete'がこれを行うが、特定の配列を削除する方法を知っている。私の質問では、 '$ this-> Cookie-> delete( 'Cart。' $ cart_item)'を試みましたが、これはエラー –

+1

ようこそです。試してみると、製品のIDと数量はゼロです。その後、カートから取り除かれます。 $ new_cartでは、特定の項目を追加しなかったためです。 –

+0

カート全体を削除する場合は、「$ this-> Cookie-> delete( 'Cart')」を使用します。なぜあなたはエラー手段を持っているのですか? ""カート。 "$ cart_item"変数として使用し、変数を使用しないでください。 "Cart"のみを使用します。 –

関連する問題