Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commite7a17ff

Browse files
committed
Merge branch '2.4' into 2.5
* 2.4: Added hint about attaching the expression constraint to a form field add missing Monolog handler type in XML config
2 parentscd07f5f +281d490 commite7a17ff

File tree

2 files changed

+103
-14
lines changed

2 files changed

+103
-14
lines changed

‎cookbook/logging/monolog_email.rst

Lines 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

Lines 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-
<classname="Acme\DemoBundle\Model\BlogPost">
95-
<constraintname="Expression">
96-
<optionname="expression">
97-
this.getCategory() in ['php', 'symfony'] or !this.isTechnicalPost()
98-
</option>
99-
<optionname="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-mappingxmlns="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+
<classname="Acme\DemoBundle\Model\BlogPost">
99+
<constraintname="Expression">
100+
<optionname="expression">
101+
this.getCategory() in ['php', 'symfony'] or !this.isTechnicalPost()
102+
</option>
103+
<optionname="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-mappingxmlns="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+
<classname="Acme\DemoBundle\Model\BlogPost">
186+
<propertyname="isTechnicalPost">
187+
<constraintname="Expression">
188+
<optionname="expression">
189+
this.getCategory() in ['php', 'symfony'] or value == false
190+
</option>
191+
<optionname="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)

[8]ページ先頭

©2009-2025 Movatter.jp