2015-10-09 63 views
1

我有一個購物車類,我希望序列化以存儲在會話變量中。PHP Zend Framework序列化對象數組

我的購物車類是

namespace Application\Model\Cart; 

use Application\Model\AbstractModel; 
use Zend\ServiceManager\ServiceManager; 
use Application\Model\Cart\Product; 
use Application\Model\Cart\ProductOptions; 
use Application\Entity\Products; 

class Cart extends AbstractModel 
{ 
    protected $products; 

    protected $totalIncVat; 

    protected $totalExVat; 


    public function __construct(ServiceManager $serviceManager = NULL) 
    { 
     parent::__construct($serviceManager); 

     $this->products = array(); 

     $product = new Product(); 
     $product->setProductId(1); 
     $option = new ProductOptions(); 
     $product->addOption($option); 
     $this->products[] = $product; 
    } 

    public function __sleep() 
    { 
     return $this->products; 
    } 
} 

正如在我加入一個測試產品和產品選項的構造可以看出。產品類別存儲在數組$this->products中。

我的產品類是

namespace Application\Model\Cart; 

use Application\Model\Cart\ProductOptions; 

    class Product 
    { 
     protected $productId; 

     protected $title; 

     protected $priceEachIncVat; 

     protected $priceEachVat; 

     protected $vat; 

     protected $qty; 

     protected $total; 

     protected $options; 

     public function __construct() 
     { 
      $this->options = array(); 
     } 

      public function getProductId() 
     { 
      return $this->productId; 
     } 

     public function getTitle() 
     { 
      return $this->title; 
     } 

     public function getPriceEachIncVat() 
     { 
      return $this->priceEachIncVat; 
     } 

     public function getPriceEachVat() 
     { 
      return $this->priceEachVat; 
     } 

     public function getVat() 
     { 
      return $this->vat; 
     } 

     public function getQty() 
     { 
      return $this->qty; 
     } 

     public function getTotal() 
     { 
      return $this->total; 
     } 

     public function getOptions() 
     { 
      return $this->options; 
     } 

     public function setProductId($productId) 
     { 
      $this->productId = $productId; 
      return $this; 
     } 

     public function setTitle($title) 
     { 
      $this->title = $title; 
      return $this; 
     } 

     public function setPriceEachIncVat($priceEachIncVat) 
     { 
      $this->priceEachIncVat = $priceEachIncVat; 
      return $this; 
     } 

     public function setPriceEachVat($priceEachVat) 
     { 
      $this->priceEachVat = $priceEachVat; 
      return $this; 
     } 

     public function setVat($vat) 
     { 
      $this->vat = $vat; 
      return $this; 
     } 

     public function setQty($qty) 
     { 
      $this->qty = $qty; 
      return $this; 
     } 

     public function setTotal($total) 
     { 
      $this->total = $total; 
      return $this; 
     } 

     public function setOptions(Array $options) 
     { 
      $this->options = $options; 
      return $this; 
     } 

     public function addOption(ProductOptions $option) 
     { 
      $this->options[] = $option; 
      return $this; 
     } 

    } 

最後我的產品選項類是

namespace Application\Model\Cart; 

class ProductOptions 
{ 
    protected $optionId; 

    protected $name; 

    protected $price; 

    protected $valueId; 

    protected $value; 

    public function getOptionId() 
    { 
     return $this->optionId; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 

    public function getPrice() 
    { 
     return $this->price; 
    } 

    public function getValueId() 
    { 
     return $this->valueId; 
    } 

    public function getValue() 
    { 
     return $this->value; 
    } 

    public function setOptionId($optionId) 
    { 
     $this->optionId = $optionId; 
     return $this; 
    } 

    public function setName($name) 
    { 
     $this->name = $name; 
     return $this; 
    } 

    public function setPrice($price) 
    { 
     $this->price = $price; 
     return $this; 
    } 

    public function setValueId($valueId) 
    { 
     $this->valueId = $valueId; 
     return $this; 
    } 

    public function setValue($value) 
    { 
     $this->value = $value; 
     return $this; 
    } 


} 

我遇到的問題是,類不序列化正確。

$serializer = new \Zend\Serializer\Adapter\PhpSerialize(); 
$serialized = $serializer->serialize($cart); 
$cart = $serializer->unserialize($serialized); 

當我從購物車的構造函數中刪除測試產品時效果都很好。產品陣列造成了這個問題。

我得到的錯誤是unserialize():41個字節的偏移量爲40的錯誤。

返回序列化的字符串是

○:27: 「應用程序\型號\車\車」:1:{N;}

有誰知道我缺少的是什麼?

非常感謝提前。

+2

我想通了。購物車類中的睡眠魔法方法應該包含返回數組('products'); – Garry

+0

你可以解答你的問題,並接受它作爲好的答案,也許它會幫助別人;) – Hooli

回答

0

我想通了。購物車類的睡眠魔法應該包含return array('products');