Я работаю в корзине покупок (модель корзины). Одним из его защищенных свойств является «_items», который содержит массив объектов Product. Они (Продукты) все хранятся в БД для заполнения сеанса (с использованием ZF, Zend_Session_SaveHandler_DbTable () и т. Д.).
public function addItem(Model_Product $product, $qty) { $qty = (int) $qty; $pId = $product->getId(); if ($qty > 0) { $this->_items[$pId] = array('product' => $product, 'qty' => $qty); } else { // if the quantity is zero (or less), remove item from stack unset($this->_items[$pId]); } // add new info to session $this->persist(); }
В контроллере я захватываю Product obj из DB с помощью ProductMapper и предоставляю его «addItem ()»:
$product1 = $prodMapper->getProductByName('cap'); $this->_cart->addItem($product1, 2);
getProductByName()
возвращает новый заполненный объект Model_Product.
Обычно я получаю
Please ensure that the class definition "Model_Product" of the object you are trying to operate on was loaded _before_ ...
сообщение об ошибке, дамп сеанса, очевидно, показывает
['__PHP_Incomplete_Class_Name'] => 'Model_Product'
Я знаю о «объявлении класса перед его сериализацией». Моя проблема заключается в следующем: как я могу объявить класс Product в addItem()
, если он сначала введен (первый параметр)? Не будет ли новая декларация (например, new Model_Product()
) переписать параметр (исходный объект) в addItem()
? Должен ли я объявить его в модели Cart снова?
Кроме того, я обязательно получу Cannot redeclare class Model_Product
если я … обновил его в корзине.