diff --git a/ModelDescriber/Annotations/AnnotationsReader.php b/ModelDescriber/Annotations/AnnotationsReader.php index ed0f5e6..0e84cec 100644 --- a/ModelDescriber/Annotations/AnnotationsReader.php +++ b/ModelDescriber/Annotations/AnnotationsReader.php @@ -40,6 +40,11 @@ class AnnotationsReader $this->symfonyConstraintAnnotationReader->setSchema($schema); } + public function getPropertyName(\ReflectionProperty $reflectionProperty, string $default): string + { + return $this->swgAnnotationsReader->getPropertyName($reflectionProperty, $default); + } + public function updateProperty(\ReflectionProperty $reflectionProperty, Schema $property) { $this->phpDocReader->updateProperty($reflectionProperty, $property); diff --git a/ModelDescriber/Annotations/SwgAnnotationsReader.php b/ModelDescriber/Annotations/SwgAnnotationsReader.php index 767ca78..3caf41a 100644 --- a/ModelDescriber/Annotations/SwgAnnotationsReader.php +++ b/ModelDescriber/Annotations/SwgAnnotationsReader.php @@ -40,6 +40,16 @@ class SwgAnnotationsReader } } + public function getPropertyName(\ReflectionProperty $reflectionProperty, string $default): string + { + /** @var SwgProperty $swgProperty */ + if (!$swgProperty = $this->annotationsReader->getPropertyAnnotation($reflectionProperty, SwgProperty::class)) { + return $default; + } + + return $swgProperty->property ?? $default; + } + public function updateProperty(\ReflectionProperty $reflectionProperty, Schema $property) { /** @var SwgProperty $swgProperty */ diff --git a/ModelDescriber/JMSModelDescriber.php b/ModelDescriber/JMSModelDescriber.php index 8c2d981..3cc92f3 100644 --- a/ModelDescriber/JMSModelDescriber.php +++ b/ModelDescriber/JMSModelDescriber.php @@ -69,11 +69,13 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn } $name = $this->namingStrategy->translateName($item); - $property = $properties->get($name); // read property options from Swagger Property annotation if it exists if (null !== $item->reflection) { + $property = $properties->get($this->annotationsReader->getPropertyName($item->reflection, $name)); $this->annotationsReader->updateProperty($item->reflection, $property); + } else { + $property = $properties->get($name); } if (null !== $property->getType()) { diff --git a/ModelDescriber/ObjectModelDescriber.php b/ModelDescriber/ObjectModelDescriber.php index 2b273bd..e81cde0 100644 --- a/ModelDescriber/ObjectModelDescriber.php +++ b/ModelDescriber/ObjectModelDescriber.php @@ -55,14 +55,13 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar } foreach ($propertyInfoProperties as $propertyName) { - $property = $properties->get($propertyName); - // read property options from Swagger Property annotation if it exists if (property_exists($class, $propertyName)) { - $this->annotationsReader->updateProperty( - new \ReflectionProperty($class, $propertyName), - $property - ); + $reflectionProperty = new \ReflectionProperty($class, $propertyName); + $property = $properties->get($this->annotationsReader->getPropertyName($reflectionProperty, $propertyName)); + $this->annotationsReader->updateProperty($reflectionProperty, $property); + } else { + $property = $properties->get($propertyName); } // If type manually defined diff --git a/Tests/Functional/Entity/JMSUser.php b/Tests/Functional/Entity/JMSUser.php index 7a7dc7e..2000e87 100644 --- a/Tests/Functional/Entity/JMSUser.php +++ b/Tests/Functional/Entity/JMSUser.php @@ -62,7 +62,7 @@ class JMSUser private $password; /** - * @SWG\Property(type="date") + * @SWG\Property(property="last_update", type="date") * @Serializer\Expose */ private $updatedAt; diff --git a/Tests/Functional/Entity/User.php b/Tests/Functional/Entity/User.php index 8529ec2..43643eb 100644 --- a/Tests/Functional/Entity/User.php +++ b/Tests/Functional/Entity/User.php @@ -57,6 +57,7 @@ class User /** * @var \DateTime + * @SWG\Property(property="creationDate") */ private $createdAt; diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 1c1d19d..38ff95e 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -179,7 +179,7 @@ class FunctionalTest extends WebTestCase 'friendsNumber' => [ 'type' => 'string', ], - 'createdAt' => [ + 'creationDate' => [ 'type' => 'string', 'format' => 'date-time', ], diff --git a/Tests/Functional/JMSFunctionalTest.php b/Tests/Functional/JMSFunctionalTest.php index c8863a7..7fff56f 100644 --- a/Tests/Functional/JMSFunctionalTest.php +++ b/Tests/Functional/JMSFunctionalTest.php @@ -63,7 +63,7 @@ class JMSFunctionalTest extends WebTestCase 'description' => 'Only enabled users may be used in actions.', 'enum' => ['disabled', 'enabled'], ], - 'updated_at' => [ + 'last_update' => [ 'type' => 'date', ], ],