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 я мог бы решить эту проблему, установив свойства protected вместо private. Единственная проблема, с которой я столкнулся, - это после чтения объекта из сеанса, о котором 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 воспринимал объекты сущностей, хранящиеся в сеансе, не сообщая об этом каждый раз.Есть идеи?

9
задан David Frank 9 April 2012 в 12:20
поделиться