Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b87f1ee

Browse filesBrowse files
committed
Merge branch '2.5'
* 2.5: Added hint about attaching the expression constraint to a form field add missing Monolog handler type in XML config
2 parents a7f3297 + e7a17ff commit b87f1ee
Copy full SHA for b87f1ee

File tree

Expand file treeCollapse file tree

2 files changed

+103
-14
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+103
-14
lines changed

‎cookbook/logging/monolog_email.rst

Copy file name to clipboardExpand all lines: cookbook/logging/monolog_email.rst
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ it is broken down.
5656
/>
5757
<monolog:handler
5858
name="swift"
59+
type="swift_mailer"
5960
from-email="error@example.com"
6061
to-email="error@example.com"
6162
subject="An Error Occurred!"

‎reference/constraints/Expression.rst

Copy file name to clipboardExpand all lines: reference/constraints/Expression.rst
+102-14Lines changed: 102 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ One way to accomplish this is with the Expression constraint:
7474
7575
// src/Acme/DemoBundle/Model/BlogPost.php
7676
namespace Acme\DemoBundle\Model\BlogPost;
77-
77+
7878
use Symfony\Component\Validator\Constraints as Assert;
7979
8080
/**
@@ -91,23 +91,27 @@ One way to accomplish this is with the Expression constraint:
9191
.. code-block:: xml
9292
9393
<!-- src/Acme/DemoBundle/Resources/config/validation.xml -->
94-
<class name="Acme\DemoBundle\Model\BlogPost">
95-
<constraint name="Expression">
96-
<option name="expression">
97-
this.getCategory() in ['php', 'symfony'] or !this.isTechnicalPost()
98-
</option>
99-
<option name="message">
100-
If this is a tech post, the category should be either php or symfony!
101-
</option>
102-
</constraint>
103-
</class>
104-
94+
<?xml version="1.0" encoding="UTF-8" ?>
95+
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
96+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
97+
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
98+
<class name="Acme\DemoBundle\Model\BlogPost">
99+
<constraint name="Expression">
100+
<option name="expression">
101+
this.getCategory() in ['php', 'symfony'] or !this.isTechnicalPost()
102+
</option>
103+
<option name="message">
104+
If this is a tech post, the category should be either php or symfony!
105+
</option>
106+
</constraint>
107+
</class>
108+
</constraint-mapping>
105109
106110
.. code-block:: php
107111
108112
// src/Acme/DemoBundle/Model/BlogPost.php
109-
namespace Acme\DemoBundle\Model\BlogPost;
110-
113+
namespace Acme\DemoBundle\Model;
114+
111115
use Symfony\Component\Validator\Mapping\ClassMetadata;
112116
use Symfony\Component\Validator\Constraints as Assert;
113117
@@ -129,6 +133,90 @@ expression that must return true in order for validation to pass. To learn
129133
more about the expression language syntax, see
130134
:doc:`/components/expression_language/syntax`.
131135

136+
.. sidebar:: Mapping the Error to a Specific Field
137+
138+
You can also attach the constraint to a specific property and still validate
139+
based on the values of the entire entity. This is handy if you want to attach
140+
the error to a specific field. In this context, ``value`` represents the value
141+
of ``isTechnicalPost``.
142+
143+
.. configuration-block::
144+
145+
.. code-block:: yaml
146+
147+
# src/Acme/DemoBundle/Resources/config/validation.yml
148+
Acme\DemoBundle\Model\BlogPost:
149+
properties:
150+
isTechnicalPost:
151+
- Expression:
152+
expression: "this.getCategory() in ['php', 'symfony'] or value == false"
153+
message: "If this is a tech post, the category should be either php or symfony!"
154+
155+
.. code-block:: php-annotations
156+
157+
// src/Acme/DemoBundle/Model/BlogPost.php
158+
namespace Acme\DemoBundle\Model;
159+
160+
use Symfony\Component\Validator\Constraints as Assert;
161+
162+
class BlogPost
163+
{
164+
// ...
165+
166+
/**
167+
* @Assert\Expression(
168+
* "this.getCategory() in ['php', 'symfony'] or value == false",
169+
* message="If this is a tech post, the category should be either php or symfony!"
170+
* )
171+
*/
172+
private $isTechnicalPost;
173+
174+
// ...
175+
}
176+
177+
.. code-block:: xml
178+
179+
<!-- src/Acme/DemoBundle/Resources/config/validation.xml -->
180+
<?xml version="1.0" encoding="UTF-8" ?>
181+
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
182+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
183+
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
184+
185+
<class name="Acme\DemoBundle\Model\BlogPost">
186+
<property name="isTechnicalPost">
187+
<constraint name="Expression">
188+
<option name="expression">
189+
this.getCategory() in ['php', 'symfony'] or value == false
190+
</option>
191+
<option name="message">
192+
If this is a tech post, the category should be either php or symfony!
193+
</option>
194+
</constraint>
195+
</property>
196+
</class>
197+
</constraint-mapping>
198+
199+
.. code-block:: php
200+
201+
// src/Acme/DemoBundle/Model/BlogPost.php
202+
namespace Acme\DemoBundle\Model;
203+
204+
use Symfony\Component\Validator\Constraints as Assert;
205+
use Symfony\Component\Validator\Mapping\ClassMetadata;
206+
207+
class BlogPost
208+
{
209+
public static function loadValidatorMetadata(ClassMetadata $metadata)
210+
{
211+
$metadata->addPropertyConstraint('isTechnicalPost', new Assert\Expression(array(
212+
'expression' => 'this.getCategory() in ["php", "symfony"] or value == false',
213+
'message' => 'If this is a tech post, the category should be either php or symfony!',
214+
)));
215+
}
216+
217+
// ...
218+
}
219+
132220
For more information about the expression and what variables are available
133221
to you, see the :ref:`expression <reference-constraint-expression-option>`
134222
option details below.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.