Contributed by
Imad Zairig
in #28477.
JSON is arguably the most used format in applications developed with Symfony. You probably make requests to JSON APIs and send/receive JSON payloads in your projects. That's why Symfony provides a JsonResponse class, a way to buildJSON authentication, full JSON support in the Serializer component, ajson() helper for controllers, etc.
In Symfony 4.3 we improved the Validator component to add a new Json constraint, which can be applied to properties and getters, and ensures that the given contents are valid JSON contents:
- Annotations
1 2 3 4 5 6 7 8 9 10 11 12
// src/Entity/Book.phpnamespaceApp\Entity;useSymfony\Component\Validator\ConstraintsasAssert;classBook{/** * @Assert\Json(message = "This is not valid JSON") */protected$chapters;}
- YAML
1 2 3 4 5 6
# config/validator/validation.yamlApp\Entity\Book:properties:chapters:-Json:message:'ThisisnotvalidJSON'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- config/validator/validation.xml --><?xml version="1.0" encoding="UTF-8" ?><constraint-mappingxmlns="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/constraint-mapping/constraint-mapping-1.0.xsd"><classname="App\Entity\Book"><propertyname="chapters"><constraintname="Json"><optionname="message">This is not valid JSON</option></constraint></property></class></constraint-mapping>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// src/Entity/Book.phpnamespaceApp\Entity;useSymfony\Component\Validator\Mapping\ClassMetadata;useSymfony\Component\Validator\ConstraintsasAssert;classBook{protected$chapters;publicstaticfunctionloadValidatorMetadata(ClassMetadata$metadata){$metadata->addPropertyConstraint('chapters',newAssert\Json(array('message'=>'This is not valid JSON',)));}}