Closed
Description
Symfony version(s) affected
6.4.2
Description
When using the cascade constraint on a class with a union typed property, the ClassMetadata will give an error:
Attempted to call an undefined method named 'getName' of class 'ReflectionUnionType'.
This is caused by ClassMetadata#L201 since $property->getType()
returns an ReflectionUnionType
.
How to reproduce
<?php
namespace Acme;
use Symfony\Component\Validator\Constraints as Assert;
#[Assert\Cascade]
class AnotherClass
{
private null|FirstClass|SecondClass $value = null;
}
<?php
namespace Acme;
use Symfony\Component\Validator\Constraints as Assert;
class FirstClass
{
#[Assert\NotBlank]
private ?string $value = null;
}
<?php
namespace Acme;
use Symfony\Component\Validator\Constraints as Assert;
class SecondClass
{
#[Assert\NotBlank]
private ?string $value = null;
}
Possible Solution
I think we can check if the property type is instance of ReflectionUnionType
and if one of the types is an array
or the defined class_exists
the constraint could be added.
I am busy until end of next week, i can work on a PR.
Additional Context
No response