2013-08-04 2 views
0

Я использую «jms/serializer»: «0.13.*@dev» для сериализации моих объектов.Сериализовать постоянные столбцы с JMS-сериализацией

Я использую его в Zend Framework (2) и проекте Doctrine.

Это мой код:

use JMS\Serializer\SerializerBuilder as SerializerBuilder; 
(....) 

public function getList() { 

    $em = $this->getEntityManager(); 
    $repo = $em->getRepository('MyApp\Entity\Product'); 
    $hydrator = new DoctrineHydrator($em); 

    $data = array(); 
    foreach ($repo->findAll() as $found) { 
     $data[] = $hydrator->extract($found); 
    } 
    $serializer = SerializerBuilder::create()->build(); 
    $jsonContent = $serializer->serialize($data, 'json'); 

    $this->getResponseWithHeader()->setStatusCode(self::OK_200); 


    return new JsonModel($jsonContent); 
} 

Но я получаю эту ошибку:

Resources are not supported in serialized data. Path: MyApp\Entity\FOO -> Doctrine\ORM\PersistentCollection -> MyApp\Entity\Product -> Doctrine\ORM\PersistentCollection -> DoctrineORMModule\Proxy__CG__\MyApp\MyApp\Brand

По-видимому, вы не можете сериализовать постоянные коллекции.

У меня googled вокруг и нашел this Вопросы, связанные с Symfony. Но как я могу решить эту проблему в рамках отдельной библиотеки Serializer?

Большое спасибо.


EDIT

Может ли это иметь ничего общего с JMS аннотациями? Должен ли я использовать определенные аннотации, чтобы заставить это работать?

ответ

1

Я предполагаю, что проблема заключается в том, что PersistentCollection может содержать ссылку на подключение к базе данных, поэтому JMS не может обрабатывать тип ресурса.

Если вы хотите только первый уровень сериализовать, то я думаю, вы могли бы взломать на него, как:

foreach ($repo->findAll() as $found) { 
    // Set these to basically empty arrays 
    $found->setRelation1(new \Doctrine\Common\Collections\ArrayCollection); 
    $found->setRelation2(new \Doctrine\Common\Collections\ArrayCollection); 
    $data[] = $hydrator->extract($found); 
} 

Или вы можете расширить функции JMS Serialize просто игнорировать коллекции ресурсов, а не бросать исключение.

+0

Спасибо за вашу реакцию. Но он не заполняет мои связанные объекты таким образом. Они оставлены пустыми ... – sanders

Смежные вопросы