Symfony2 serializa o objeto de entidade para a sessão

Quero salvar um dos meus objetos de entidade na sessão, mas, ao fazer isso, estou recebendo os dois erros a seguir:

Exceção: Symfony \ Bundle \ FrameworkBundle \ DataCollector \ RequestDataCollector :: serialize () deve retornar uma string ou NULL

ErrorException: Aviso: serialize (): "id" retornado como variável de membro de __sleep (), mas não existe em / var / www / clients / client71 / web256 / web / _dev_fd / kkupon / vendor / symfony / src / Symfony / Component / HttpKernel / DataCollector / DataCollector.php line 29

Meu código é assim:

$offer = $this->getEntityManager()->getRepository('KkuponMainBundle:Offer')->find($offer_id);
$request->getSession()->set('offer', $offer);

Como eu consegui acertar?

Obrigado

ATUALIZA Com a ajuda do Rowgm, eu poderia corrigir esse problema definindo propriedades protegidas em vez de privadas. O único problema que tenho é depois delend a entidade da sessão que o EntityManager não conhece e se eu adicionar o objeto (da sessão) a outro objeto (existe um relacionamento OneToMany entre eles), ele não funcionar

<?php
$offer = $this->get('session')->get('offer');
$coupon = new Coupon();
$coupon->setOffer($offer);
$this->em->persist($coupon);
$this->em->flush();

Isso gera um erro, porque o cupom tem uma propriedade de objeto que, de acordo com o EntityManager, não está no banco de dados (na verdade, ele está no banco de dados, eu coloquei a sessão no banco de dados

<?php
$offer = $this->get('session')->get('offer');
echo $this->em->getUnitOfWork()->isInIdentityMap($offer) ? "yes":"no"; //result: no

ma solução pode ser:$offer = $this->em->merge($offer);

Mas isso não parece ser o melhor. Eu gostaria que meu EntityManager percebesse os objetos de entidade armazenados na sessão sem avisar a cada vez. Qualquer ideia

questionAnswers(6)

yourAnswerToTheQuestion