首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel会话::遗忘方法更改了我的JSON Get请求输出

Laravel会话::遗忘方法更改了我的JSON Get请求输出
EN

Stack Overflow用户
提问于 2017-05-31 11:58:33
回答 1查看 134关注 0票数 0

更新:

我认为出现这个问题是因为最后一个键号可以从Session Array中删除,但是当我不删除最后一个键号时,就会得到不同的格式。还不知道怎么解决这个问题。

我目前正在通过角请求存储和检索数据,这些请求从Laravel中放置和检索值。

代码语言:javascript
运行
复制
// Code for pushing into Laravel Session Array
Session::push('cart', $object); 

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

现在,我使用foreach循环来更新quantity或者这个问题的内容:在quantity为0时,从Laravel购物车中删除一个对象。

代码语言:javascript
运行
复制
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输出:

代码语言:javascript
运行
复制
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

删除之前的JSON情况:

代码语言:javascript
运行
复制
[
  {
   "id":293,
   "quantity":2
  },
  {
   "id":294,
   "quantity":2
  }
]

删除后的JSON情况:

代码语言:javascript
运行
复制
{"1":{"id":293,
      "quantity":2}
}

,但应该是:

代码语言:javascript
运行
复制
[
  {
   "id":293,
   "quantity":2
  }
]

这是我的角Get请求,它简单地调用:return Session::get('cart')

代码语言:javascript
运行
复制
Cart.getCart()
   .then(function (success){
       $scope.cart = success.data;
    }).catch(function (e){
       console.log("got an error in the process", e);
    });

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 13:09:43

更新更好的解决方案:

从另一篇堆栈溢出文章中获得了这一理论基础:deleting JSON array element in PHP, and re-encoding as JSON

代码调整在这里:

代码语言:javascript
运行
复制
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

将是:

代码语言:javascript
运行
复制
Session::forget('cart.' . $index);
Session::get('cart', []);
return null;

获取会话购物车值

代码语言:javascript
运行
复制
return json_encode(array_values(Session::get('cart')));

唯一需要的就是使用array_values。这将重新编号json数组。

旧解决方案:

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

代码语言:javascript
运行
复制
Session::forget('cart.' . $index);
$cart = Session::get('cart', []);
Session::push('cart', $cart);

将下面的代码作为替换:

代码语言:javascript
运行
复制
Session::forget('cart.' . $index);
$temp_cart = Session::get('cart', []);
Session::forget('cart');
foreach($temp_cart as $c){
   Session::push('cart', $c);
}
return null;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44284213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档