2015-06-16 7 views
3

У меня есть следующий код:Обновление сессии в Symfony2 для shoppingg корзины

public function addAction(Request $request){ 
    //Get submited data 
    // Get Value from session 
    $sessionVal = $this->get('session')->get('aBasket'); 
    // Append value to retrieved array. 
    $aBasket = $request->request->all(); 
    if(count($sessionVal) > 0) { 
     foreach ($sessionVal as $key=>$value) { 
      if($aBasket['product_id'] == $sessionVal[$key]['product_id']) 
      { 
       $sessionVal[$key]['product_quantity'] = $sessionVal[$key]['product_quantity'] + $aBasket['product_quantity']; 
       $this->get('session')->set('aBasket', $sessionVal); 
      } 
      else 
      { 
       $sessionVal[] = $aBasket; 
       $this->get('session')->set('aBasket', $sessionVal); 
      } 
     } 
    } 
    else 
    { 
     $sessionVal[] = $aBasket; 
     $this->get('session')->set('aBasket', $sessionVal); 
    } 
    // Set value back to session 
    return $this->redirect($this->generateUrl('shop_desktop_homepage')); 
} 

Идея заключается в том, чтобы увеличить количество существующего продукта, если идентификатор не corespond затем добавить их. Теперь количество правильно добавлено, но и продукт также добавлен. Возьмите решение? Помогите мне пожалуйста ...

ответ

1

Вы можете упростить свой код, я предполагаю, что ваш массив сессия будет выглядеть как

array(
    '11' =>array('id'=>'11','title'=>'some product','product_quantity'=>2), 
    '12' =>array('id'=>'12','title'=>'some product','product_quantity'=>1), 
    '13' =>array('id'=>'13','title'=>'some product','product_quantity'=>3), 
); 

ключ в вашей корзине массив будет идентификатор продукта, так что не будет никаких шансов дубликата продукт в массиве теперь в нижнем коде, я удалил foreach цикл, вместо этого я использовал только проверку if if(isset($sessionVal[$aBasket['product_id']])), существует ли продукт в массиве корзины, помещая идентификатор продукта вместо ключа, например if(isset($sessionVal['11'])), если существует, то увеличивайте количество на единицу, если не существует, тогда вставить продукт в корзину

public function addAction(Request $request) { 
    $sessionVal = $this->get('session')->get('aBasket'); 
    $aBasket = $request->request->all(); 
    if(isset($sessionVal[$aBasket['product_id']])){ 
     $sessionVal[$aBasket['product_id']]['product_quantity'] += 1; 
    }else{ 
     $sessionVal[$aBasket['product_id']]= array(
      'id'=>$aBasket['product_id'], 
      'product_quantity' => 1, 
      'other_info' => '...' 
     ); 
    } 
    $this->get('session')->set('aBasket', $sessionVal); 
    return $this->redirect($this->generateUrl('shop_desktop_homepage')); 
} 
+0

Thx @M Халид Джунайд ... – TanGio