function Composite::__construct
Same name in this branch
- 11.1.x vendor/open-telemetry/sdk/Resource/Detectors/Composite.php \OpenTelemetry\SDK\Resource\Detectors\Composite::__construct()
The groups of the composite and its nested constraints are made consistent using the following strategy:
- If groups are passed explicitly to the composite constraint, but not to the nested constraints, the options of the composite constraint are copied to the nested constraints;
- If groups are passed explicitly to the nested constraints, but not to the composite constraint, the groups of all nested constraints are merged and used as groups for the composite constraint;
- If groups are passed explicitly to both the composite and its nested constraints, the groups of the nested constraints must be a subset of the groups of the composite constraint. If not, a {@link ConstraintDefinitionException} is thrown.
All this is done in the constructor, because constraints can then be cached. When constraints are loaded from the cache, no more group checks need to be done.
Overrides Constraint::__construct
12 calls to Composite::__construct()
- All::__construct in vendor/
symfony/ validator/ Constraints/ All.php - All::__construct in vendor/
symfony/ validator/ Constraints/ All.php - AtLeastOneOf::__construct in vendor/
symfony/ validator/ Constraints/ AtLeastOneOf.php - AtLeastOneOf::__construct in vendor/
symfony/ validator/ Constraints/ AtLeastOneOf.php - Collection::__construct in vendor/
symfony/ validator/ Constraints/ Collection.php
6 methods override Composite::__construct()
- All::__construct in vendor/
symfony/ validator/ Constraints/ All.php - AtLeastOneOf::__construct in vendor/
symfony/ validator/ Constraints/ AtLeastOneOf.php - Collection::__construct in vendor/
symfony/ validator/ Constraints/ Collection.php - Compound::__construct in vendor/
symfony/ validator/ Constraints/ Compound.php - The groups of the composite and its nested constraints are made consistent using the following strategy:
- Sequentially::__construct in vendor/
symfony/ validator/ Constraints/ Sequentially.php
File
-
vendor/
symfony/ validator/ Constraints/ Composite.php, line 52
Class
- Composite
- A constraint that is composed of other constraints.
Namespace
Symfony\Component\Validator\ConstraintsCode
public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null) {
parent::__construct($options, $groups, $payload);
$this->initializeNestedConstraints();
/* @var Constraint[] $nestedConstraints */
$compositeOption = $this->getCompositeOption();
$nestedConstraints = $this->{$compositeOption};
if (!\is_array($nestedConstraints)) {
$nestedConstraints = [
$nestedConstraints,
];
}
foreach ($nestedConstraints as $constraint) {
if (!$constraint instanceof Constraint) {
if (\is_object($constraint)) {
$constraint = $constraint::class;
}
throw new ConstraintDefinitionException(\sprintf('The value "%s" is not an instance of Constraint in constraint "%s".', $constraint, static::class));
}
if ($constraint instanceof Valid) {
throw new ConstraintDefinitionException(\sprintf('The constraint Valid cannot be nested inside constraint "%s". You can only declare the Valid constraint directly on a field or method.', static::class));
}
}
if (!isset(((array) $this)['groups'])) {
$mergedGroups = [];
foreach ($nestedConstraints as $constraint) {
foreach ($constraint->groups as $group) {
$mergedGroups[$group] = true;
}
}
// prevent empty composite constraint to have empty groups
$this->groups = array_keys($mergedGroups) ?: [
self::DEFAULT_GROUP,
];
$this->{$compositeOption} = $nestedConstraints;
return;
}
foreach ($nestedConstraints as $constraint) {
if (isset(((array) $constraint)['groups'])) {
$excessGroups = array_diff($constraint->groups, $this->groups);
if (\count($excessGroups) > 0) {
throw new ConstraintDefinitionException(\sprintf('The group(s) "%s" passed to the constraint "%s" should also be passed to its containing constraint "%s".', implode('", "', $excessGroups), get_debug_type($constraint), static::class));
}
}
else {
$constraint->groups = $this->groups;
}
}
$this->{$compositeOption} = $nestedConstraints;
}