Affects Version/s: 2.1.2
Fix Version/s: None
Security Level: All
I am figuring a problem with Symfony Validator constraints (I use annotations to define the constraint rules).
As I don't use Symfony's framework, I create the validator service by myself.
Somewhere in its factory, I put the following code:
Then, in my entities, I have annotations such as:
In this configuration, I get the following error:
[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\NotBlank"
in property Domain\Entity\Author::$name does not exist, or could not be auto-loaded.
I was able to trace it down to the Doctrine\Common\Annotations\AnnotationRegistry#loadAnnotationClass($class) where we can find the following test:
which means "if the namespace can be found at the beginning of the FQCN, require it".
But those namespaces come from "use" statements where there is no leading backslash.
That's why the test fails.
Christophe Coevoet answered:
you should remove the leading backslash. Fully qualified class names used as string don't include it in PHP.
Benjamin Eberlei suggested to remove the leading backslash before comparing the class to the namespace.
I would follow Benjamin suggestion and would like to add a comment about leading backslashes:
When I add a use statement to my code for a class, I can then use its alias to get an instance of that class.
The same is true with:
This is not a fully qualified class name.
In that sense, I do understand such an annotation: @ORM\Entity.
But I find the syntax of a fully-qualified annotation (@My\Annotation\Whatever) erroneous (or at least counter-intuitive) as it doesn't start with a backslash.