PHP Zend Framework сериализует массив объектов

1

У меня есть класс корзины покупок, который я хочу сериализовать для хранения в переменной сеанса.

Мой класс корзины

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(): Ошибка при смещении 40 из 41 байт.

Возвращенная строка

O: 27: "Применение\Модель\Корзина\Корзина": 1: {N}

Кто-нибудь знает, что мне не хватает?

Спасибо заранее.

  • 2
    Я понял. Магический метод сна в классе cart должен содержать возвращаемый массив ('products');
  • 0
    Вы можете ответить на свой вопрос и принять его как хороший ответ, может быть, это поможет кому-то еще;)
Теги:
zend-framework2

1 ответ

0
Лучший ответ

Я понял. Метод магии сна в классе корзины должен содержать return array('products');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню