protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) { $propertyName = $propertyMetadata->name; if ($doctrineMetadata->hasField($propertyName) && ($fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName)))) { $propertyMetadata->setType($fieldType); } elseif ($doctrineMetadata->hasAssociation($propertyName)) { $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName); if (null === ($targetMetadata = $this->tryLoadingDoctrineMetadata($targetEntity))) { return; } // For inheritance schemes, we cannot add any type as we would only add the super-type of the hierarchy. // On serialization, this would lead to only the supertype being serialized, and properties of subtypes // being ignored. if ($targetMetadata instanceof DoctrineClassMetadata && !$targetMetadata->isInheritanceTypeNone()) { return; } if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) { $targetEntity = "ArrayCollection<{$targetEntity}>"; } $propertyMetadata->setType($targetEntity); } }
protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) { $propertyName = $propertyMetadata->name; if ($doctrineMetadata->hasField($propertyName) && ($fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName)))) { $field = $doctrineMetadata->getField($propertyName); if (!empty($field['multivalue'])) { $fieldType = 'array'; } $propertyMetadata->setType($fieldType); } elseif ($doctrineMetadata->hasAssociation($propertyName)) { try { $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName); } catch (\Exception $e) { return; } if (null === $this->tryLoadingDoctrineMetadata($targetEntity)) { return; } if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) { $targetEntity = "ArrayCollection<{$targetEntity}>"; } $propertyMetadata->setType($targetEntity); } }
/** * Assigns the data type for a property. * * @param PropertyMetadata $propertyMetadata * @param string $type * @throws Exception\UnsupportedType */ protected function setTypeMetadata(PropertyMetadata $propertyMetadata, $type) { $propertyMetadata->setType($type); }
$pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'id'); $pMetadata->setType('string'); $pMetadata->groups = array('comments', 'post'); $pMetadata->xmlElementCData = false; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'title'); $pMetadata->setType('string'); $pMetadata->groups = array('comments', 'post'); $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'createdAt'); $pMetadata->setType('DateTime'); $pMetadata->xmlAttribute = true; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'published'); $pMetadata->setType('boolean'); $pMetadata->serializedName = 'is_published'; $pMetadata->groups = array('post'); $pMetadata->xmlAttribute = true; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'comments'); $pMetadata->setType('ArrayCollection<JMS\\Serializer\\Tests\\Fixtures\\Comment>'); $pMetadata->xmlCollection = true; $pMetadata->xmlCollectionInline = true; $pMetadata->xmlEntryName = 'comment'; $pMetadata->groups = array('comments'); $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\BlogPost', 'author'); $pMetadata->setType('JMS\\Serializer\\Tests\\Fixtures\\Author'); $pMetadata->groups = array('post'); $metadata->addPropertyMetadata($pMetadata); return $metadata;
use JMS\Serializer\Metadata\ClassMetadata; use JMS\Serializer\Metadata\PropertyMetadata; $metadata = new ClassMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces'); $metadata->xmlRootName = 'test-object'; $metadata->xmlRootNamespace = 'http://example.com/namespace'; $metadata->registerNamespace('http://example.com/namespace'); $metadata->registerNamespace('http://schemas.google.com/g/2005', 'gd'); $metadata->registerNamespace('http://www.w3.org/2005/Atom', 'atom'); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces', 'title'); $pMetadata->setType('string'); $pMetadata->xmlNamespace = "http://purl.org/dc/elements/1.1/"; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces', 'createdAt'); $pMetadata->setType('DateTime'); $pMetadata->xmlAttribute = true; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces', 'etag'); $pMetadata->setType('string'); $pMetadata->xmlAttribute = true; $pMetadata->xmlNamespace = 'http://schemas.google.com/g/2005'; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces', 'author'); $pMetadata->setType('string'); $pMetadata->xmlNamespace = 'http://www.w3.org/2005/Atom'; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces', 'language'); $pMetadata->setType('string'); $pMetadata->xmlAttribute = true; $pMetadata->xmlNamespace = 'http://purl.org/dc/elements/1.1/'; $metadata->addPropertyMetadata($pMetadata); return $metadata;
<?php use JMS\Serializer\Metadata\ClassMetadata; use JMS\Serializer\Metadata\PropertyMetadata; $metadata = new ClassMetadata('JMS\\Serializer\\Tests\\Fixtures\\Person'); $metadata->xmlRootName = 'child'; $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\Person', 'name'); $pMetadata->setType('string'); $pMetadata->xmlValue = true; $pMetadata->xmlElementCData = false; $metadata->addPropertyMetadata($pMetadata); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\Person', 'age'); $pMetadata->setType('integer'); $pMetadata->xmlAttribute = true; $metadata->addPropertyMetadata($pMetadata); return $metadata;
<?php use JMS\Serializer\Metadata\ClassMetadata; use JMS\Serializer\Metadata\PropertyMetadata; $metadata = new ClassMetadata('JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Vehicle'); $metadata->setDiscriminator('type', array('car' => 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Car', 'moped' => 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Moped')); $km = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Vehicle', 'km'); $km->setType('integer'); $metadata->addPropertyMetadata($km); return $metadata;
<?php use JMS\Serializer\Metadata\ClassMetadata; use JMS\Serializer\Metadata\PropertyMetadata; $metadata = new ClassMetadata('JMS\\Serializer\\Tests\\Fixtures\\Price'); $pMetadata = new PropertyMetadata('JMS\\Serializer\\Tests\\Fixtures\\Price', 'price'); $pMetadata->setType('double'); $pMetadata->xmlValue = true; $metadata->addPropertyMetadata($pMetadata); return $metadata;