Symfony v4.2
Я пытаюсь использовать нормализатор и сериализатор Symfony для преобразования моих сущностей в JSON.
Я следовал шаблону аннотаций Groups, потому что он звучит как наиболее интуитивныйи перспективный способ сделать это.
Согласно документам , нам нужно вручную создать экземпляр ClassMetadataFactory
, чтобы загрузить AnnotationLoader
.Я все еще использую ObjectNormalizer
, который работал нормально до использования аннотаций.
Вот мой метод сериализации:
/**
* @param bool $event Serialize all event fields (except references)
* @param bool $meta Serialize referenced meta instance
* @param bool $targets Serialize referenced target instances
* @param bool $users Serialize referenced user instances
* @param bool $videos Serialize referenced video instances
* @param bool $photos Serialize referenced photo instances
* @return string
*/
public function serialize($event = true, $meta = false, $targets = false, $users = false, $videos = false, $photos = false) {
$serializingGroups = [];
if ($event) {
$serializingGroups[] = 'event';
}
if ($meta) {
$serializingGroups[] = 'meta';
}
if ($targets) {
$serializingGroups[] = "targets";
}
if ($users) {
$serializingGroups[] = 'users';
}
if ($videos) {
$serializingGroups[] = 'videos';
}
if ($photos) {
$serializingGroups[] = 'photos';
}
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$normalizer = new ObjectNormalizer($classMetadataFactory);
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
$data = $serializer->normalize($this, null, ['groups' => $serializingGroups]);
return $serializer->serialize($data, 'json');
}
Эти группы существуют для ускорения сериализации, если мне не нужноассоциации должны быть сериализованы.
Теперь, когда я использую групповые аннотации, json выглядит следующим образом
"{"id":2,
"title":"test",
"description":"<p> test<\/p>",
"subscriptionPrice":"0.00",
"subscriptionUntil":[], // DATE - WHY EMPTY ARRAY?
"start":[], // DATE - WHY EMPTY ARRAY?
"end":[], // DATE - WHY EMPTY ARRAY?
"allDay":false,
"creationDate":[], // DATE - WHY EMPTY ARRAY?
"editDate":[], // DATE - WHY EMPTY ARRAY?
"editable":true,
"startEditable":true,
"durationEditable":true,
"overlap":false,
"color":"#9EABAB",
"backgroundColor":"#9eabab",
"borderColor":"#9eabab",
"textColor":"#000000",
"isRecurring":true,
"meta":[], // ASSOCIATED ENTITY - WHY EMPTY ARRAY?
"targets":[[]] // ASSOCIATED COLLECTION OF ENTITIES - WHY EMPTY ARRAY?
}"
Почему это работает, когда я не использую аннотации?Почему даты и другие объекты являются пустыми массивами, когда я использую аннотации?