Pustaka pengalamatan PHP 8.0+, didukung oleh CLDR dan data alamat Google.
Memanipulasi alamat pos, yang dimaksudkan untuk mengidentifikasi lokasi penerima yang tepat untuk tujuan pengiriman atau penagihan.
Fitur:
Format dan subdivisi alamat pada awalnya dihasilkan dari Layanan Data Alamat Google, dan kini dimiliki dan dikelola oleh perpustakaan.
Periksa juga commerceguys/intl untuk bahasa/mata uang/format angka yang didukung CLDR.
Antarmuka alamat mewakili alamat pos, dengan pengambil untuk bidang berikut:
Nama bidang mengikuti standar OASIS eXtensible Address Language (xAL).
Antarmuka tidak membuat asumsi tentang mutabilitas. Aplikasi implementasi dapat memperluas antarmuka untuk menyediakan setter, atau mengimplementasikan objek nilai yang menggunakan gaya PSR-7 dengan* mutator atau mengandalkan AddressBuilder. Objek nilai alamat default disediakan yang dapat digunakan sebagai contoh, atau dipetakan oleh Doctrine (sebaiknya sebagai yang dapat disematkan).
Format alamat memberikan informasi berikut:
Negara ini memberikan informasi berikut:
Subdivisi memberikan informasi berikut:
Subdivisi bersifat hierarkis dan dapat memiliki hingga tiga tingkatan: Wilayah Administratif -> Lokalitas -> Lokalitas Tergantung.
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 ();
}
Alamat diformat sesuai dengan format alamat, dalam HTML atau teks.
Memformat alamat untuk ditampilkan, selalu menambahkan nama negara yang dilokalkan.
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>
**/
Menangani bidang huruf besar jika diperlukan oleh format (untuk memfasilitasi penyortiran surat otomatis).
Memerlukan penentuan kode negara asal, sehingga dapat membedakan antara kiriman domestik dan internasional. Untuk pengiriman domestik, nama negara tidak ditampilkan sama sekali. Untuk pengiriman internasional:
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
**/
Validasi alamat bergantung pada perpustakaan Symfony Validator.
Pemeriksaan dilakukan:
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 ());
}
Zona adalah pengelompokan teritorial yang sering digunakan untuk tujuan pelayaran atau perpajakan. Misalnya, sekumpulan tarif pengiriman yang terkait dengan suatu zona di mana tarif tersebut hanya tersedia jika alamat pelanggan termasuk dalam zona tersebut.
Suatu zona dapat cocok dengan negara, subdivisi (negara bagian/provinsi/kota), kode pos. Kode pos juga dapat dinyatakan menggunakan rentang atau ekspresi reguler.
Contoh zona:
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