trait PrecedingConstraintAwareValidatorTrait

Same name and namespace in other branches
  1. 9 core/modules/ckeditor5/src/Plugin/Validation/Constraint/PrecedingConstraintAwareValidatorTrait.php \Drupal\ckeditor5\Plugin\Validation\Constraint\PrecedingConstraintAwareValidatorTrait
  2. 10 core/modules/ckeditor5/src/Plugin/Validation/Constraint/PrecedingConstraintAwareValidatorTrait.php \Drupal\ckeditor5\Plugin\Validation\Constraint\PrecedingConstraintAwareValidatorTrait

A constraint may need preceding constraints to not have been violated.

@internal

Hierarchy

File

core/modules/ckeditor5/src/Plugin/Validation/Constraint/PrecedingConstraintAwareValidatorTrait.php, line 16

Namespace

Drupal\ckeditor5\Plugin\Validation\Constraint
View source
trait PrecedingConstraintAwareValidatorTrait {
    
    /**
     * Checks whether any preceding constraints have been violated.
     *
     * @param \Symfony\Component\Validator\Constraint $current_constraint
     *   The constraint currently being validated.
     *
     * @return bool
     *   TRUE if any preceding constraints have been violated, FALSE otherwise.
     */
    protected function hasViolationsForPrecedingConstraints(Constraint $current_constraint) : bool {
        assert($this->context instanceof ExecutionContext);
        $earlier_constraints = iterator_to_array($this->getPrecedingConstraints($current_constraint));
        $earlier_violations = array_filter(iterator_to_array($this->context
            ->getViolations()), function (ConstraintViolationInterface $violation) use ($earlier_constraints) {
            return in_array($violation->getConstraint(), $earlier_constraints);
        });
        return !empty($earlier_violations);
    }
    
    /**
     * Gets the constraints preceding the given constraint in the current context.
     *
     * @param \Symfony\Component\Validator\Constraint $needle
     *   The constraint to find the preceding constraints for.
     *
     * @return iterable
     *   The preceding constraints.
     */
    private function getPrecedingConstraints(Constraint $needle) : iterable {
        assert($this->context instanceof ExecutionContext);
        $constraints = $this->context
            ->getMetadata()
            ->getConstraints();
        if (!in_array($needle, $constraints)) {
            throw new \OutOfBoundsException();
        }
        foreach ($constraints as $constraint) {
            if ($constraint != $needle) {
                (yield $constraint);
            }
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary
PrecedingConstraintAwareValidatorTrait::getPrecedingConstraints private function Gets the constraints preceding the given constraint in the current context.
PrecedingConstraintAwareValidatorTrait::hasViolationsForPrecedingConstraints protected function Checks whether any preceding constraints have been violated.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.