diff --git a/ModelDescriber/Annotations/SymfonyConstraintAnnotationReader.php b/ModelDescriber/Annotations/SymfonyConstraintAnnotationReader.php index 15b70ce..80d4231 100644 --- a/ModelDescriber/Annotations/SymfonyConstraintAnnotationReader.php +++ b/ModelDescriber/Annotations/SymfonyConstraintAnnotationReader.php @@ -69,7 +69,7 @@ class SymfonyConstraintAnnotationReader $property->setMinItems($annotation->min); $property->setMaxItems($annotation->max); } elseif ($annotation instanceof Assert\Choice) { - $property->setEnum($annotation->callback ? call_user_func($annotation->callback) : $annotation->choices); + $property->setEnum($annotation->callback ? call_user_func(is_array($annotation->callback) ? $annotation->callback : [$reflectionProperty->class, $annotation->callback]) : $annotation->choices); } elseif ($annotation instanceof Assert\Expression) { $this->appendPattern($property, $annotation->message); } diff --git a/Tests/Functional/Entity/SymfonyConstraints.php b/Tests/Functional/Entity/SymfonyConstraints.php index 23610f4..d4d51f8 100644 --- a/Tests/Functional/Entity/SymfonyConstraints.php +++ b/Tests/Functional/Entity/SymfonyConstraints.php @@ -64,6 +64,13 @@ class SymfonyConstraints */ private $propertyChoiceWithCallback; + /** + * @var int + * + * @Assert\Choice(callback="fetchAllowedChoices") + */ + private $propertyChoiceWithCallbackWithoutClass; + /** * @var int * @@ -130,6 +137,14 @@ class SymfonyConstraints $this->propertyChoiceWithCallback = $propertyChoiceWithCallback; } + /** + * @param int $propertyChoiceWithCallbackWithoutClass + */ + public function setPropertyChoiceWithCallbackWithoutClass(int $propertyChoiceWithCallbackWithoutClass): void + { + $this->propertyChoiceWithCallbackWithoutClass = $propertyChoiceWithCallbackWithoutClass; + } + /** * @param int $propertyExpression */ diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index dbd2012..b4c35bc 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -374,6 +374,10 @@ class FunctionalTest extends WebTestCase 'type' => 'integer', 'enum' => ['choice1', 'choice2'], ], + 'propertyChoiceWithCallbackWithoutClass' => [ + 'type' => 'integer', + 'enum' => ['choice1', 'choice2'], + ], 'propertyExpression' => [ 'type' => 'integer', 'pattern' => 'If this is a tech post, the category should be either php or symfony!',