如何解决这个 Laravel 会话问题
Posted
技术标签:
【中文标题】如何解决这个 Laravel 会话问题【英文标题】:How to solve this Laravel session issue 【发布时间】: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 关系?我说的对吗? 【参考方案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();
【讨论】:
以上是关于如何解决这个 Laravel 会话问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP cURL 没有存储会话 cookie...如何解决这个问题?