CommerceGuys\Addressing\Validator\Constraints\AddressFormatConstraintValidator::validateSubdivisions PHP Method

validateSubdivisions() protected method

Validates the provided subdivision values.
protected validateSubdivisions ( array $values, AddressFormat $addressFormat, Constraint $constraint ) : array
$values array The field values, keyed by field constants.
$addressFormat CommerceGuys\Addressing\AddressFormat\AddressFormat The address format.
$constraint Symfony\Component\Validator\Constraint The constraint.
return array An array of found valid subdivisions.
    protected function validateSubdivisions($values, AddressFormat $addressFormat, $constraint)
    {
        $countryCode = $addressFormat->getCountryCode();
        if ($addressFormat->getSubdivisionDepth() < 1) {
            // No predefined subdivisions exist, nothing to validate against.
            return [];
        }
        $subdivisionFields = $addressFormat->getUsedSubdivisionFields();
        $parents = [];
        $subdivisions = [];
        foreach ($subdivisionFields as $index => $field) {
            if (empty($values[$field]) || !in_array($field, $constraint->fields)) {
                // The field is empty or validation is disabled.
                break;
            }
            $parents[] = $index ? $values[$subdivisionFields[$index - 1]] : $countryCode;
            $subdivision = $this->subdivisionRepository->get($values[$field], $parents);
            if (!$subdivision) {
                $this->addViolation($field, $constraint->invalidMessage, $values[$field], $addressFormat);
                break;
            }
            $subdivisions[] = $subdivision;
            if (!$subdivision->hasChildren()) {
                // No predefined subdivisions below this level, stop here.
                break;
            }
        }
        return $subdivisions;
    }