Symfony2 сериализует объект сущности в сеанс
Я хочу сохранить один из моих объектов сущности в сеансе, но при этом я получаю две следующие ошибки:
Исключение: Symfony \ Bundle \ FrameworkBundle \ DataCollector \ RequestDataCollector :: serialize () должно возвращать строку или NULL
а также
ErrorException: Примечание: serialize (): «id» возвращается как переменная-член из __sleep (), но не существует в / var / www / clients / client71 / web256 / web / _dev_fd / kkupon / vendor / symfony / src / Symfony / Component /HttpKernel/DataCollector/DataCollector.php строка 29
Мой код выглядит так:
$offer = $this->getEntityManager()->getRepository('KkuponMainBundle:Offer')->find($offer_id);
$request->getSession()->set('offer', $offer);
Как я могу сделать это правильно?
Спасибо.
ОБНОВИТЬ С помощью Rowgm я мог бы решить эту проблему, установив свойства, защищенные вместо личных. Единственная проблема у меня послечтение сущность из сеанса, которую EntityManager не знает об этом, и если я добавлю объект (из сеанса) к другому объекту (между ними есть связь OneToMany), он не будет работать.
<?php
$offer = $this->get('session')->get('offer');
$coupon = new Coupon();
$coupon->setOffer($offer);
$this->em->persist($coupon);
$this->em->flush();
Это вызывает ошибку, потому что купон имеет свойство объекта, которого в соответствии с EntityManager нет в базе данных (на самом деле он находится в БД, я помещаю в сеанс из БД).
<?php
$offer = $this->get('session')->get('offer');
echo $this->em->getUnitOfWork()->isInIdentityMap($offer) ? "yes":"no"; //result: no
Одним из решений может быть:$offer = $this->em->merge($offer);
Но это не кажется лучшим. Я бы хотел, чтобы мой EntityManager воспринимал объекты сущностей, хранящиеся в сеансе, не сообщая об этом каждый раз. Любая идея?