我使用orders
方法将购物车数据保存到serialize
表格,现在在我的订单“查看”页面中,我想将它们显示给用户以显示其订单历史记录。
如何将以前序列化的数据还原到PHP中的可用对象/数组?
我保存数据的代码段:$order->cart = serialize($cartItems);
。
我尝试返回订单索引视图的方法:
/**
* Action to receive all orders from the current
* logged-in user. This action will return the
* 'front.orders' view with the orders compacted inside.
*
* @return orders view
*/
public function orders() {
// get the orders from the current logged in user
$orders = Order::where('user_id', '=', Auth::user()->id)->get();
// view the `front.orders` page passing in the `orders` variable
return view('front.orders', compact('orders'));
}
答案 0 :(得分:1)
您可以使用map()
方法将unserialize购物车属性用于整个集合:
$orders = $orders->map(function($i) {
$i->cart = unserialize($i->cart);
return $i;
});
或者,您可以使用accessor自动取消序列化属性:
public function getCartAttribute($value)
{
return unserialize($value);
}
或只是unserialize Blade中的数据:
@foreach ($orders as $order)
{{ unserialize($order->cart)->someData }}
@endforeach
答案 1 :(得分:1)
确定您可以使用先前答案中的内置unserialize()
功能。
但是
由于过分习惯,避免在代码中使用unserialize()
:
https://www.notsosecure.com/remote-code-execution-via-php-unserialize/ https://www.php.net/manual/en/function.unserialize.php
我将使用Magento 1中的安全简单库: https://github.com/bragento/magento-core/tree/1.9/lib/Unserialize
$parser = new Unserialize_Parser();
$parser->unserialize($yourStringWithArray)
答案 2 :(得分:0)
serialize只是一个内置的,可变处理的PHP函数。对应的是unserialize。