83 lines
2.6 KiB
PHP
83 lines
2.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Validator\Constraints;
|
|
|
|
/**
|
|
* A sequence of validation groups.
|
|
*
|
|
* When validating a group sequence, each group will only be validated if all
|
|
* of the previous groups in the sequence succeeded. For example:
|
|
*
|
|
* $validator->validate($address, null, new GroupSequence(['Basic', 'Strict']));
|
|
*
|
|
* In the first step, all constraints that belong to the group "Basic" will be
|
|
* validated. If none of the constraints fail, the validator will then validate
|
|
* the constraints in group "Strict". This is useful, for example, if "Strict"
|
|
* contains expensive checks that require a lot of CPU or slow, external
|
|
* services. You usually don't want to run expensive checks if any of the cheap
|
|
* checks fail.
|
|
*
|
|
* When adding metadata to a class, you can override the "Default" group of
|
|
* that class with a group sequence:
|
|
* #[GroupSequence(['Address', 'Strict'])]
|
|
* class Address
|
|
* {
|
|
* // ...
|
|
* }
|
|
*
|
|
* Whenever you validate that object in the "Default" group, the group sequence
|
|
* will be validated:
|
|
*
|
|
* $validator->validate($address);
|
|
*
|
|
* If you want to execute the constraints of the "Default" group for a class
|
|
* with an overridden default group, pass the class name as group name instead:
|
|
*
|
|
* $validator->validate($address, null, "Address")
|
|
*
|
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
|
*/
|
|
#[\Attribute(\Attribute::TARGET_CLASS)]
|
|
class GroupSequence
|
|
{
|
|
/**
|
|
* The groups in the sequence.
|
|
*
|
|
* @var array<int, string|string[]|GroupSequence>
|
|
*/
|
|
public array $groups;
|
|
|
|
/**
|
|
* The group in which cascaded objects are validated when validating
|
|
* this sequence.
|
|
*
|
|
* By default, cascaded objects are validated in each of the groups of
|
|
* the sequence.
|
|
*
|
|
* If a class has a group sequence attached, that sequence replaces the
|
|
* "Default" group. When validating that class in the "Default" group, the
|
|
* group sequence is used instead, but still the "Default" group should be
|
|
* cascaded to other objects.
|
|
*/
|
|
public string|GroupSequence $cascadedGroup;
|
|
|
|
/**
|
|
* Creates a new group sequence.
|
|
*
|
|
* @param array<string|string[]|GroupSequence> $groups The groups in the sequence
|
|
*/
|
|
public function __construct(array $groups)
|
|
{
|
|
$this->groups = $groups['value'] ?? $groups;
|
|
}
|
|
}
|