I have made it through half of the Symfony2 bible and am now reading up on validation. My bundles uses XML configuration, so I switched to that format in the examples and used the following to constraint my Log entity.
<class name="Nogfx\LogBundle\Entity\Log"> <property name="title"> <constraint name="NotBlank" /> </property> </class>
Sadly it crashed with an error message:
[ERROR 1845] Element 'class': No matching global declaration available for the validation root. (in /app/dir/src/Nogfx/LogBundle/Resources/config/validation.xml - line 1, column 0) 500 Internal Server Error - MappingException
So the XML was obviously malformed. But how then should it be structured?
After some digging around I managed to find an example and that cleared it out. Given my previous example, this is how it should have been structured instead.
<?xml version="1.0" encoding="UTF-8" ?> <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/services/constraint-mapping-1.0.xsd"> <class name="Nogfx\LogBundle\Entity\Log"> <property name="title"> <constraint name="NotBlank" /> </property> </class> <constraint-mapping>
Just like with the routing, we need to define a root element with a proper namespace and DTD. Adding that solved my problem.
This should of course be fixed in the documentation and I will do so myself if no one else beats me to it. Still, I hope this post can help someone with the same problem before the fix is in.
Update: Ryan Weaver accepted my pull request and this problem should be fixed on next deployment.