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 619bd2c

Browse filesBrowse files
committed
Merge pull request symfony#2766 from WouterJ/issue_2664
Added docs about GroupSequenceProviders
2 parents 8a88e73 + 7c49c2f commit 619bd2c
Copy full SHA for 619bd2c

File tree

Expand file treeCollapse file tree

1 file changed

+127
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+127
-0
lines changed

‎book/validation.rst

Copy file name to clipboardExpand all lines: book/validation.rst
+127Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,133 @@ In this example, it will first validate all constraints in the group ``User``
932932
(which is the same as the ``Default`` group). Only if all constraints in
933933
that group are valid, the second group, ``Strict``, will be validated.
934934

935+
Group Sequence Providers
936+
~~~~~~~~~~~~~~~~~~~~~~~~
937+
938+
Imagine a ``User`` entity which can be a normal user or a premium user. When
939+
it's a premium user, some extra constraints should be added to the user entity
940+
(e.g. the credit card details). To dynamically determine which groups should
941+
be activated, you can create a Group Sequence Provider. First, create the
942+
entity and a new constraint group called ``Premium``:
943+
944+
.. configuration-block::
945+
946+
.. code-block:: php-annotations
947+
948+
// src/Acme/DemoBundle/Entity/User.php
949+
namespace Acme\DemoBundle\Entity;
950+
951+
use Symfony\Component\Validator\Constraints as Assert;
952+
953+
class User
954+
{
955+
// ...
956+
957+
/**
958+
* @Assert\NotBlank()
959+
*/
960+
private $name;
961+
962+
/**
963+
* @Assert\CardScheme(
964+
* schemes={"VISA"},
965+
* groups={"Premium"},
966+
* )
967+
private $creditCard;
968+
}
969+
970+
.. code-block:: yaml
971+
972+
# src/Acme/DemoBundle/Resources/config/validation.yml
973+
Acme\DemoBundle\Entity\User:
974+
properties:
975+
name:
976+
- NotBlank
977+
creditCard:
978+
- CardScheme
979+
schemes: [VISA]
980+
groups: [Premium]
981+
982+
.. code-block:: xml
983+
984+
<!-- src/Acme/DemoBundle/Resources/config/validation.xml -->
985+
<class name="Acme\DemoBundle\Entity\User">
986+
<property name="name">
987+
<constraint name="NotBlank" />
988+
</property>
989+
990+
<property name="creditCard">
991+
<constraint name="CardScheme">
992+
<option name="schemes">
993+
<value>VISA</value>
994+
</option>
995+
<option name="groups">
996+
<value>Premium</value>
997+
</option>
998+
</constraint>
999+
</property>
1000+
</class>
1001+
1002+
.. code-block:: php
1003+
1004+
// src/Acme/DemoBundle/Entity/User.php
1005+
namespace Acme\DemoBundle\Entity;
1006+
1007+
use Symfony\Component\Validator\Constraints as Assert;
1008+
use Symfony\Component\Validator\Mapping\ClassMetadata;
1009+
1010+
class User
1011+
{
1012+
private $name;
1013+
private $creditCard;
1014+
1015+
// ...
1016+
1017+
public static function loadValidatorMetadata(ClassMetadata $metadata)
1018+
{
1019+
$metadata->addPropertyConstraint('name', new Assert\NotBlank());
1020+
$metadata->addPropertyConstraint('creditCard', new Assert\CardScheme(
1021+
'schemes' => array('VISA'),
1022+
'groups' => array('Premium'),
1023+
));
1024+
}
1025+
}
1026+
1027+
Now, let this class implement
1028+
:class:`Symfony\\Componet\\Validation\\GroupSequenceProviderInterface` and
1029+
implement a method called
1030+
:method:`Symfony\\Componet\\Validation\\GroupSequenceProviderInterface::getGroupSequence`,
1031+
which returns an array of groups to use and add the
1032+
``@Assert\GroupSequencdeProvider`` annotation to the class. Imagine a method
1033+
``isPremium`` returns true if the user is a premium member. Your method looks
1034+
like this::
1035+
1036+
// src/Acme/DemoBundle/Entity/User.php
1037+
namespace Acme\DemoBundle\Entity;
1038+
1039+
// ...
1040+
use Symfony\Component\Validation\GroupSequenceProviderInterface;
1041+
1042+
/**
1043+
* @Assert\GroupSequenceProvider
1044+
* ...
1045+
*/
1046+
class User
1047+
{
1048+
// ...
1049+
1050+
public function getGroupSequence()
1051+
{
1052+
$groups = array('User');
1053+
1054+
if ($this->isPremium()) {
1055+
$groups[] = 'Premium';
1056+
}
1057+
1058+
return $groups;
1059+
}
1060+
}
1061+
9351062
.. _book-validation-raw-values:
9361063

9371064
Validating Values and Arrays

0 commit comments

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