/** * Creates a new AddressFormat instance. * * @param array $definition The definition array. */ public function __construct(array $definition) { // Validate the presence of required properties. foreach (['country_code', 'format'] as $requiredProperty) { if (empty($definition[$requiredProperty])) { throw new \InvalidArgumentException(sprintf('Missing required property %s.', $requiredProperty)); } } // Add defaults for properties that are allowed to be empty. $definition += ['locale' => null, 'local_format' => null, 'required_fields' => [], 'uppercase_fields' => [], 'postal_code_pattern' => null, 'postal_code_prefix' => null, 'subdivision_depth' => 0]; AddressField::assertAllExist($definition['required_fields']); AddressField::assertAllExist($definition['uppercase_fields']); $this->countryCode = $definition['country_code']; $this->locale = $definition['locale']; $this->format = $definition['format']; $this->localFormat = $definition['local_format']; $this->requiredFields = $definition['required_fields']; $this->uppercaseFields = $definition['uppercase_fields']; $this->subdivisionDepth = $definition['subdivision_depth']; $usedFields = $this->getUsedFields(); if (in_array(AddressField::ADMINISTRATIVE_AREA, $usedFields)) { if (isset($definition['administrative_area_type'])) { AdministrativeAreaType::assertExists($definition['administrative_area_type']); $this->administrativeAreaType = $definition['administrative_area_type']; } } if (in_array(AddressField::LOCALITY, $usedFields)) { if (isset($definition['locality_type'])) { LocalityType::assertExists($definition['locality_type']); $this->localityType = $definition['locality_type']; } } if (in_array(AddressField::DEPENDENT_LOCALITY, $usedFields)) { if (isset($definition['dependent_locality_type'])) { DependentLocalityType::assertExists($definition['dependent_locality_type']); $this->dependentLocalityType = $definition['dependent_locality_type']; } } if (in_array(AddressField::POSTAL_CODE, $usedFields)) { if (isset($definition['postal_code_type'])) { PostalCodeType::assertExists($definition['postal_code_type']); $this->postalCodeType = $definition['postal_code_type']; } $this->postalCodePattern = $definition['postal_code_pattern']; $this->postalCodePrefix = $definition['postal_code_prefix']; } }