在laravel中反序列化数据

时间:2018-01-06 09:16:29

标签: php laravel serialization

我使用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'));
}

3 个答案:

答案 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