【问题标题】:How to solve this Laravel session issue如何解决这个 Laravel 会话问题
【发布时间】:2020-10-03 12:04:53
【问题描述】:

我有一个数组。然后我使用 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 类型的对象并得到我想要的??

【问题讨论】:

  • 我想你已经序列化了 App\Cart 模型和嵌套的 items 关系?我说的对吗?

标签: arrays laravel session


【解决方案1】:

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

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

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

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

另一方面,使用 json_encode 获取 Cart Instance 并不容易,但您可以尝试使用 Object Serialization 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);

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

【讨论】:

    【解决方案2】:

    当你想将对象转换为数组时,你可以使用toArray()方法,像这样:

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

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 2012-01-28
      • 2021-08-18
      • 2011-03-07
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多