@@ -6,7 +6,8 @@ How to create a Custom Validation Constraint
6
6
7
7
You can create a custom constraint by extending the base constraint class,
8
8
:class: `Symfony\\ Component\\ Validator\\ Constraint `.
9
- As an example we're going to create a simple validator that checks if string contains only alphanumeric characters.
9
+ As an example we're going to create a simple validator that checks if string
10
+ contains only alphanumeric characters.
10
11
11
12
Creating Constraint class
12
13
-------------------------
@@ -78,32 +79,73 @@ The validator class is also simple, and only has one required method: ``isValid`
78
79
Using newly created validator
79
80
-----------------------------
80
81
81
- Using custom validators is very easy, just as the ones provided by Symfony2 itself::
82
+ Using custom validators is very easy, just as the ones provided by Symfony2 itself:
82
83
83
- namespace Acme\DemoBundle\Entity;
84
+ .. configuration-block ::
84
85
85
- use Doctrine\ORM\Mapping as ORM;
86
- use Symfony\Component\Validator\Constraints as Assert;
87
- use Acme\DemoBundle\Validator\Constraints as AcmeAssert;
86
+ .. code-block :: yaml
88
87
89
- class AcmeEntity
90
- {
91
- /**
92
- * @ORM\Id
93
- * @ORM\GeneratedValue
94
- * @ORM\Column(name="id", type="integer")
95
- */
96
- protected $id;
88
+ # src/Acme/BlogBundle/Resources/config/validation.yml
89
+ Acme\DemoBundle\Entity\AcmeEntity :
90
+ properties :
91
+ name :
92
+ - NotBlank : ~
93
+ - Acme\DemoBundle\Validator\Constraints\ContainsAlphanumeric : ~
94
+
95
+ .. code-block :: php-annotations
96
+
97
+ // src/Acme/DemoBundle/Entity/AcmeEntity.php
97
98
98
- /**
99
- * @Assert\NotBlank
100
- * @AcmeAssert\ContainsAlphanumeric
101
- * @ORM\Column(name="name", type="string", length=100)
102
- */
103
- protected $name;
99
+ use Symfony\Component\Validator\Constraints as Assert;
100
+ use Acme\DemoBundle\Validator\Constraints as AcmeAssert;
101
+
102
+ class AcmeEntity
103
+ {
104
+ // ...
105
+
106
+ /**
107
+ * @Assert\NotBlank
108
+ * @AcmeAssert\ContainsAlphanumeric
109
+ */
110
+ protected $name;
111
+
112
+ // ...
113
+ }
114
+
115
+ .. code-block :: xml
104
116
105
- // ...
106
- }
117
+ <!-- src/Acme/DemoBundle/Resources/config/validation.xml -->
118
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
119
+ <constraint-mapping xmlns =" http://symfony.com/schema/dic/constraint-mapping"
120
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
121
+ xsi : schemaLocation =" http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd" >
122
+
123
+ <class name =" Acme\DemoBundle\Entity\AcmeEntity" >
124
+ <property name =" name" >
125
+ <constraint name =" NotBlank" />
126
+ <constraint name =" Acme\DemoBundle\Validator\Constraints\ContainsAlphanumeric" />
127
+ </property >
128
+ </class >
129
+ </constraint-mapping >
130
+
131
+ .. code-block :: php
132
+
133
+ // src/Acme/DemoBundle/Entity/AcmeEntity.php
134
+
135
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
136
+ use Symfony\Component\Validator\Constraints\NotBlank;
137
+ use Acme\DemoBundle\Validator\Constraints\ContainsAlphanumeric;
138
+
139
+ class AcmeEntity
140
+ {
141
+ public $name;
142
+
143
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
144
+ {
145
+ $metadata->addPropertyConstraint('name', new NotBlank());
146
+ $metadata->addPropertyConstraint('name', new ContainsAlph
51C9
anumeric());
147
+ }
148
+ }
107
149
108
150
Constraint Validators with Dependencies
109
151
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 commit comments