Сеанс обновления в symfony2 для корзины покупок


У меня есть следующий код:

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

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

Author: TanGio, 2015-06-16

1 answers

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

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(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' ) );
}
 1
Author: M Khalid Junaid, 2015-06-18 22:16:41