CLDR 및 Google의 주소 데이터를 기반으로 하는 PHP 8.0+ 주소 지정 라이브러리입니다.
배송 또는 청구 목적으로 정확한 수령인 위치를 식별하기 위해 우편 주소를 조작합니다.
특징:
주소 형식 및 하위 구분은 처음에 Google의 주소 데이터 서비스에서 생성되었으며 현재는 도서관에서 소유하고 유지 관리합니다.
또한 CLDR 기반 언어/통화/숫자 형식에 대해서는 Commerceguys/intl을 확인하세요.
주소 인터페이스는 다음 필드에 대한 getter를 사용하여 우편 주소를 나타냅니다.
필드 이름은 OASIS xAL(eXtensible Address Language) 표준을 따릅니다.
인터페이스는 가변성에 대해 어떠한 가정도 하지 않습니다. 구현 애플리케이션은 인터페이스를 확장하여 setter를 제공하거나, PSR-7 스타일과* mutator를 사용하거나 AddressBuilder에 의존하는 값 개체를 구현할 수 있습니다. 예제로 사용하거나 Doctrine으로 매핑할 수 있는(가급적 내장 가능) 기본 주소 값 개체가 제공됩니다.
주소 형식은 다음 정보를 제공합니다.
국가에서는 다음과 같은 정보를 제공합니다.
하위 부문에서는 다음 정보를 제공합니다.
하위 구역은 계층적이며 최대 3개 수준(행정 구역 -> 지역 -> 종속 지역)을 가질 수 있습니다.
use CommerceGuys Addressing AddressFormat AddressFormatRepository ;
use CommerceGuys Addressing Country CountryRepository ;
use CommerceGuys Addressing Subdivision SubdivisionRepository ;
$ countryRepository = new CountryRepository ();
$ addressFormatRepository = new AddressFormatRepository ();
$ subdivisionRepository = new SubdivisionRepository ();
// Get the country list (countryCode => name), in French.
$ countryList = $ countryRepository -> getList ( ' fr-FR ' );
// Get the country object for Brazil.
$ brazil = $ countryRepository -> get ( ' BR ' );
echo $ brazil -> getThreeLetterCode (); // BRA
echo $ brazil -> getName (); // Brazil
echo $ brazil -> getCurrencyCode (); // BRL
print_r ( $ brazil -> getTimezones ());
// Get all country objects.
$ countries = $ countryRepository -> getAll ();
// Get the address format for Brazil.
$ addressFormat = $ addressFormatRepository -> get ( ' BR ' );
// Get the subdivisions for Brazil.
$ states = $ subdivisionRepository -> getAll ([ ' BR ' ]);
foreach ( $ states as $ state ) {
$ municipalities = $ state -> getChildren ();
}
// Get the subdivisions for Brazilian state Ceará.
$ municipalities = $ subdivisionRepository -> getAll ([ ' BR ' , ' CE ' ]);
foreach ( $ municipalities as $ municipality ) {
echo $ municipality -> getName ();
}
주소는 주소 형식(HTML 또는 텍스트)에 따라 형식이 지정됩니다.
표시할 주소 형식을 지정하고 항상 현지화된 국가 이름을 추가합니다.
use CommerceGuys Addressing Address ;
use CommerceGuys Addressing Formatter DefaultFormatter ;
use CommerceGuys Addressing AddressFormat AddressFormatRepository ;
use CommerceGuys Addressing Country CountryRepository ;
use CommerceGuys Addressing Subdivision SubdivisionRepository ;
$ addressFormatRepository = new AddressFormatRepository ();
$ countryRepository = new CountryRepository ();
$ subdivisionRepository = new SubdivisionRepository ();
$ formatter = new DefaultFormatter ( $ addressFormatRepository , $ countryRepository , $ subdivisionRepository );
// Options passed to the constructor or format() allow turning off
// html rendering, customizing the wrapper element and its attributes.
$ address = new Address ();
$ address = $ address
-> withCountryCode ( ' US ' )
-> withAdministrativeArea ( ' CA ' )
-> withLocality ( ' Mountain View ' )
-> withAddressLine1 ( ' 1098 Alta Ave ' );
echo $ formatter -> format ( $ address );
/** Output:
<p translate="no">
<span class="address-line1">1098 Alta Ave</span><br>
<span class="locality">Mountain View</span>, <span class="administrative-area">CA</span><br>
<span class="country">United States</span>
</p>
**/
형식에 따라 필요한 경우 대문자 필드를 처리합니다(자동 메일 정렬을 용이하게 하기 위해).
국내 우편과 국제 우편을 구별할 수 있도록 발송 국가 코드를 지정해야 합니다. 국내 우편의 경우 국가명이 전혀 표시되지 않습니다. 국제우편의 경우:
use CommerceGuys Addressing Address ;
use CommerceGuys Addressing Formatter PostalLabelFormatter ;
use CommerceGuys Addressing AddressFormat AddressFormatRepository ;
use CommerceGuys Addressing Country CountryRepository ;
use CommerceGuys Addressing Subdivision SubdivisionRepository ;
$ addressFormatRepository = new AddressFormatRepository ();
$ countryRepository = new CountryRepository ();
$ subdivisionRepository = new SubdivisionRepository ();
// Defaults to text rendering. Requires passing the "origin_country"
// (e.g. 'FR') to the constructor or to format().
$ formatter = new PostalLabelFormatter ( $ addressFormatRepository , $ countryRepository , $ subdivisionRepository , [ ' locale ' => ' fr ' ]);
$ address = new Address ();
$ address = $ address
-> withCountryCode ( ' US ' )
-> withAdministrativeArea ( ' CA ' )
-> withLocality ( ' Mountain View ' )
-> withAddressLine1 ( ' 1098 Alta Ave ' );
echo $ formatter -> format ( $ address , [ ' origin_country ' => ' FR ' ]);
/** Output:
1098 Alta Ave
MOUNTAIN VIEW, CA 94043
ÉTATS-UNIS - UNITED STATES
**/
주소 유효성 검사는 Symfony Validator 라이브러리에 의존합니다.
수행된 검사:
use CommerceGuys Addressing Address ;
use CommerceGuys Addressing Validator Constraints AddressFormatConstraint ;
use CommerceGuys Addressing Validator Constraints CountryConstraint ;
use Symfony Component Validator Validation ;
$ address = new Address ( ' FR ' );
$ validator = Validation :: createValidator ();
// Validate the country code, then validate the rest of the address.
$ violations = $ validator -> validate ( $ address -> getCountryCode (), new CountryConstraint ());
if (! $ violations -> count ()) {
$ violations = $ validator -> validate ( $ address , new AddressFormatConstraint ());
}
구역은 운송 또는 세금 목적으로 자주 사용되는 영토 그룹입니다. 예를 들어, 고객의 주소가 해당 구역에 속하는 경우에만 요금을 사용할 수 있는 구역과 연관된 배송비 세트입니다.
영역은 국가, 하위 구역(시/도/지방자치단체), 우편번호와 일치할 수 있습니다. 우편번호는 범위나 정규식을 사용하여 표현할 수도 있습니다.
영역의 예:
use CommerceGuys Addressing Address ;
use CommerceGuys Addressing Zone Zone ;
// Create the German VAT zone (Germany and 4 Austrian postal codes).
$ zone = new Zone ([
' id ' => ' german_vat ' ,
' label ' => ' German VAT ' ,
' territories ' => [
[ ' country_code ' => ' DE ' ],
[ ' country_code ' => ' AT ' , ' included_postal_codes ' => ' 6691, 6991:6993 ' ],
],
]);
// Check if the provided austrian address matches the German VAT zone.
$ austrianAddress = new Address ();
$ austrianAddress = $ austrianAddress
-> withCountryCode ( ' AT ' )
-> withPostalCode ( ' 6992 ' );
echo $ zone -> match ( $ austrianAddress ); // true