У меня есть мой Entity.Project.yml
файл в My/NamedBundle/Resources/config/serializer/Entity.Project.yml
My\NamedBundle\Entity\Project:
exclusion_policy: ALL
properties:
id:
exclude: true
type: integer
Это полностью игнорируется, и все атрибуты открываются во время сериализации. Что я пропустил?
Документация по этой части, по-видимому, отсутствует без реального примера схемы именования файла или содержимого самого файла yml.
Я очищал кеш 100 раз, пытаясь заставить это работать.
$project = $repo->find(1);
$serializer = SerializerBuilder::create()->build();
$json = $serializer->serialize($project, 'json');
Обновление сериализатора контейнера приводит к ошибке
$serializer = $this->get("jms_serializer")
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new MySubscriber($this->container));
})
->addDefaultListeners()
->build();
Попытка вызвать метод «configureListeners» для класса «JMS \ Serializer \ Serializer»
Вы используете JMS Serializer Bundle с Symfony, правильно? Потому что вы можете избежать ручного создания компоновщика каждый раз и просто использовать сервис:
$this->get('jms_serializer')->serialize($project, 'json');
Если вы все еще хотите сделать это вручную, попробуйте указать каталог метаданных YML при создании сериализатора. Даже если ваши файлы отдельных моделей указывают на полный путь вашей сущности, сериализатор все еще не знает, где находится этот каталог. Аннотации не требуют этого, потому что вы уже внутри сущности.
http://jmsyst.com/libs/serializer/master/configuration
$serializer =
JMS\Serializer\SerializerBuilder::create()
->addMetadataDir('My/NamedBundle/Resources/config/serializer')
->build();
Других решений пока нет …