В моем контроллере в Symfony2 я получаю коллекцию сообщений в блогах как объекты Doctrine:
$posts = $this->getDoctrine()
->getRepository('MyBundle:Post')
->findPostDatesAscending();
Я послушно установил пакет JMSSerializer, поскольку он должен работать с Doctrine ORM, и вызвал службу также в своем контроллере:
$serializer = $this->container->get('jms_serializer');
$jsonContent = $serializer->serialize($posts, 'json');
echo $jsonContent;
Однако я получаю следующую ошибку:
FatalErrorException: Ошибка: допустимый размер памяти 134217728 байт исчерпан (попытался выделить 55204 байта) в C: \ wamp \ www \ Symfony \ vendor \ jms \ serializer \ src \ JMS \ Serializer \ GenericSerializationVisitor.php, строка 58
Я уже пытался найти эту проблему, и, похоже, не так много радости в том, чтобы заставить работать сериализацию Entities в JSON. Я уверен, что это какая-то проблема с рекурсией, но я новичок в Symfony2, поэтому я не уверен в причинах, по которым это так, и, в частности, как я могу получить эти Entities / Objects в строку JSON.
Чуть не забыл, что у моего объекта post есть отношение oneToMany. Не уверен, актуально ли это:
/BlogBundle/Resources/config/doctrine/Blog.orm.yml
MyBundle\BlogBundle\Entity\Blog:
type: entity
repositoryClass: MyBundle\BlogBundle\Entity\BlogRepository
oneToMany:
posts:
targetEntity: Post
mappedBy: blog
table: null
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
blog:
type: string
length: '255'
uniqueConstraints:
search_idx:
columns: blog
lifecycleCallbacks: { }
И мой объект блога также сопоставляется с объектом автора - типичный блог, настроенный на самом деле ...
РЕДАКТИРОВАТЬ: В ответ на @kix я добавил код исключения ко ВСЕМ моим классам сущностей (сообщение, см. Пример кода ниже, блог и автор), который исключил все объекты, которые должны быть сериализованы, и ВСЕ ЕЩЕ получил ошибку памяти. Я ограничил ответ только одним сообщением в блоге, которое связано только с блогом (идентификатор и имя) и автором (идентификатор и имя).
namespace MyBundle\BlogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
/**
* The following annotations tells the serializer to skip all properties which
* have not marked with @Expose.
*
* @ExclusionPolicy("all")
*/
/**
* Post
*/
class Post
{
/**
* @var integer
*/
private $id;
...etc
Любая помощь будет оценена по достоинству, спасибо.