initializeExcluded = $initializeExcluded; } /** * {@inheritdoc} */ public static function getSubscribingMethods() { $methods = []; $formats = ['json', 'xml', 'yml']; $collectionTypes = [ 'ArrayCollection', 'Doctrine\Common\Collections\ArrayCollection', 'Doctrine\ORM\PersistentCollection', 'Doctrine\ODM\MongoDB\PersistentCollection', 'Doctrine\ODM\PHPCR\PersistentCollection', ]; foreach ($collectionTypes as $type) { foreach ($formats as $format) { $methods[] = [ 'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION, 'type' => $type, 'format' => $format, 'method' => 'serializeCollection', ]; $methods[] = [ 'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION, 'type' => $type, 'format' => $format, 'method' => 'deserializeCollection', ]; } } return $methods; } /** * @return array|\ArrayObject */ public function serializeCollection(SerializationVisitorInterface $visitor, Collection $collection, array $type, SerializationContext $context) { // We change the base type, and pass through possible parameters. $type['name'] = 'array'; $context->stopVisiting($collection); if (false === $this->initializeExcluded) { $exclusionStrategy = $context->getExclusionStrategy(); if (null !== $exclusionStrategy && $exclusionStrategy->shouldSkipClass($context->getMetadataFactory()->getMetadataForClass(\get_class($collection)), $context)) { $context->startVisiting($collection); return $visitor->visitArray([], $type, $context); } } $result = $visitor->visitArray($collection->toArray(), $type); $context->startVisiting($collection); return $result; } /** * @param mixed $data */ public function deserializeCollection(DeserializationVisitorInterface $visitor, $data, array $type, DeserializationContext $context): ArrayCollection { // See above. $type['name'] = 'array'; return new ArrayCollection($visitor->visitArray($data, $type)); } }