如何解决这个Laravel会话问题

问题描述 投票:1回答:2

我有一个数组。然后,我使用php unset方法从数组中仅删除了一个索引。然后,我在laravel会话中存储了新数组。

$GetCartItems = json_decode($request->SessionValue);

unset($GetCartItems->items[$request->ArrIndex]);

$request->session()->put('cart', $GetCartItems);

之后,我使用下面的代码从laravel会话中重试了该数组。现在它是stdClass类型的对象,而不是数组。但是,我想要一个数组。

 $GetCartItems = Session::get('cart');

这是我想从laravel会议中得到的。

App\Cart {#282 ▼
  +items: array:3 [▼
    0 => array:6 [▼
      "item_id" => "29"
      "qty" => array:1 [▶]
      "price" => "1235"
      "size" => array:1 [▶]
      "item" => App\Product {#283 ▶}
      "produ" => array:1 [▶]
    ]
    1 => array:6 [▶]
    2 => array:6 [▶]
  ]
  +totalQty: 3
  +totalPrice: 3705
  +count: 3
  +ArrCount: 3
}

这是在删除带有元素的一个索引并存储在laravel会话中后得到的结果。

{#282 ▼
  +"items": array:3 [▼
    0 => {#283 ▼
      +"item_id": "29"
      +"qty": array:1 [▶]
      +"price": "1235"
      +"size": array:1 [▶]
      +"item": {#284 ▶}
      +"produ": array:1 [▶]
    }
    1 => {#286 ▶}
    2 => {#290 ▶}
  ]
  +"totalQty": 6
  +"totalPrice": 7410
  +"count": 6
  +"ArrCount": 3
}

如何摆脱stdClass类型的对象并得到我想要的?

arrays laravel session
2个回答
0
投票

无论何时要将对象转换为数组,都可以使用toArray()方法,如下所示:

$GetCartItems = Session::get('cart')->toArray();

0
投票

在下面的行中,您将SessionValue转换为stdClass对象,因为json_decode将序列化的对象转换为stdClass

$GetCartItems = json_decode($request->SessionValue);

如果在第二个的json_decode参数中添加true,则将得到一个Array而不是stdClass

$GetCartItems = json_decode($request->SessionValue, true);

另一方面,没有简单的方法来获取带有json_encode的购物车实例,但是您可以尝试使用对象序列化https://www.php.net/manual/en/language.oop5.serialization.php

<?php

class Cart implements \Serializable
{
    public $items;
    public function __construct()
    {
        $this->items = [
            1,2,3
        ];
    }
    public function serialize() {
        return serialize($this->items);
    }
    public function unserialize($items) {
        $this->items = unserialize($items);
    }
}

这样,您将能够序列化对象并将其持久保存到会话中

<?php

$GetCartItems = unserialize($request->SessionValue);

unset($GetCartItems->items[$request->ArrIndex]);

$request->session()->put('cart', serialize(($GetCartItems));

下次尝试执行此操作

$GetCartItems = unserialize($request->SessionValue);

您将获得具有正确值的购物车实例:)

© www.soinside.com 2019 - 2024. All rights reserved.