【问题标题】:Update session in symfony2 for shoppingg cart更新 symfony2 中的购物车会话
【发布时间】:2015-06-19 06:16:41
【问题描述】:

我有以下代码:

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

这个想法是增加现有产品的数量,如果 id 不对应,则添加它们。现在添加的数量是正确的,但是也添加了产品。有解决方案吗??请帮帮我...

【问题讨论】:

    标签: php symfony symfony-2.1 php-5.3 symfony-2.3


    【解决方案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),
    );
    

    您的购物车数组中的键将是产品 ID,因此现在在下面的代码中将不会在数组中重复产品我已经删除了 foreach 循环,而是我只使用了一个 if 检查 if(isset($sessionVal[$aBasket['product_id']])) 产品是否已经存在于通过将产品 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' ) );
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2022-11-21
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多