CakePHP序列化对象

时间:2014-03-03 17:05:56

标签: session cakephp serialization

我遇到了以下问题: 我有一个班级 CartItem 。我想在会话中存储CartItem的对象数组(实际上我实现了购物车)。

class CartItem extends AppModel{

    var $name = "CartItem";

    var $useTable = false;
}

我试过了:

function addToCart(){

    $this->loadModel("Cart");

    $this->layout = false;
    $this->render(false);

    $cart = array();

    $tempcart = unserialize($this->Session->read("cart")); 

    if(isset($tempcart)){
        $cart = $tempcart;
    }

    $productId = $this->request->data("id");

    if(!$this->existsInCart($cart, $productId)){

        $cartItem = new Cart();

        $cartItem->productId = $productId;
        $cartItem->createdAt = date();

        $cart[] = $cartItem;

        $this->Session->write("cart", serialize($cart));

        echo "added";
    }
    else
        echo "duplicate";
}

我认为我写错了这些行:

$tempcart = unserialize($this->Session->read("cart"));

$this->Session->write("cart", serialize($cart));

因为我没有从会话中获取数据。

1 个答案:

答案 0 :(得分:1)

您正在尝试将整个Cart对象添加到会话中。

你应该添加一个数组,比如

$cart[] = array(
    'productId' => $productId,
    'createdAt' => date('Y-m-d H:i:s')
);

如果您需要向会话添加对象,可以使用__sleep and __wakeup magic functions但我认为在这种情况下,最好只将产品ID和日期添加到会话中。