Laravel Session :: forget方法改变我的JSON获取请求输出

时间:2017-05-31 11:58:33

标签: angularjs json laravel session laravel-5

更新:

我认为问题出现的原因是可以从会话阵列中删除最后一个密钥编号,但是当我不删除最后一个密钥编号时,我会得到不同的格式。不知道如何解决这个问题。

我目前通过角度请求存储和检索数据  从Laravel会话数组中放入和检索值。

// Code for pushing into Laravel Session Array
Session::push('cart', $object); 

// Code for retrieving data into Laravel Session Array
return Session::get('cart'); 

现在我使用foreach循环更新数量或问题所在  是关于:从Laravel会话阵列购物车中删除对象时 数量为0。

public function updateQuantity($id, $quantity, $operator){
    $cart = Session::get('cart', []);

    foreach ($cart as $index => &$product) {
        if ($product['id'] == $id) {
            if($operator == '+'){
                $product['quantity'] = $product['quantity'] + $quantity;
            } else if($operator == '-'){
                $product['quantity'] = $product['quantity'] - $quantity;
                if($product['quantity'] == 0){
                    Session::forget('cart.' . $index);
                    $cart = Session::get('cart', []);
                    Session::push('cart', $cart);
                }
            }
            Session::set('cart', $cart);
            $this->new_product = false;
            break;
        }
    }
    return $this->new_product;
}

上面这部分代码正在改变我的JSON输出:

Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

删除前的JSON情况:

[
  {
   "id":293,
   "quantity":2
  },
  {
   "id":294,
   "quantity":2
  }
]

删除后的JSON情况:

{"1":{"id":293,
      "quantity":2}
}

但应该是:

[
  {
   "id":293,
   "quantity":2
  }
]

这是我的Angular Get Request,只需调用:return Session::get('cart')

Cart.getCart()
   .then(function (success){
       $scope.cart = success.data;
    }).catch(function (e){
       console.log("got an error in the process", e);
    });

任何帮助将不胜感激。不确定是什么导致我的json数组转换为不同的数据模型。

附加说明:当我在Session中添加最后一个对象并再次删除同一个对象时,它按预期工作。当我切换删除顺序时,它会弄乱json。

1 个答案:

答案 0 :(得分:0)

更新了更好的解决方案:

从另一个stackoverflow文章中得到了这个理论: deleting JSON array element in PHP, and re-encoding as JSON

此处的代码调整:

Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

将:

Session::forget('cart.' . $index);
Session::get('cart', []);
return null;

获取会话购物车价值

return json_encode(array_values(Session::get('cart')));

只需要使用array_values。这将重新编号json数组。

旧解决方案:

通过替换以下内容解决了问题:

Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

将以下代码替换为:

Session::forget('cart.' . $index);
$temp_cart = Session::get('cart', []);
Session::forget('cart');
foreach($temp_cart as $c){
   Session::push('cart', $c);
}
return null;

不要认为这是最好的解决方案,因为我正在重建整个会话阵列,所以欢迎任何想法。