ไลบรารีการกำหนดที่อยู่ PHP 8.0+ ขับเคลื่อนโดย CLDR และข้อมูลที่อยู่ของ Google
จัดการที่อยู่ทางไปรษณีย์ซึ่งมีจุดประสงค์เพื่อระบุตำแหน่งผู้รับที่แม่นยำเพื่อวัตถุประสงค์ในการจัดส่งหรือการเรียกเก็บเงิน
คุณสมบัติ:
รูปแบบที่อยู่และการแบ่งเขตถูกสร้างขึ้นในตอนแรกจากบริการข้อมูลที่อยู่ของ Google และขณะนี้ห้องสมุดเป็นเจ้าของและดูแลรักษา
นอกจากนี้ ให้ตรวจสอบ commerceguys/intl สำหรับการจัดรูปแบบภาษา/สกุลเงิน/ตัวเลขที่ขับเคลื่อนโดย CLDR
อินเทอร์เฟซที่อยู่แสดงถึงที่อยู่ทางไปรษณีย์ โดยมี getters สำหรับฟิลด์ต่อไปนี้:
ชื่อฟิลด์เป็นไปตามมาตรฐาน OASIS eXtensible Address Language (xAL)
อินเทอร์เฟซไม่ได้ตั้งสมมติฐานเกี่ยวกับความไม่แน่นอน แอปพลิเคชันที่ใช้งานสามารถขยายอินเทอร์เฟซเพื่อจัดเตรียมตัวตั้งค่า หรือใช้ออบเจ็กต์ค่าที่ใช้สไตล์ PSR-7 พร้อมด้วย* mutators หรืออาศัย AddressBuilder มีการจัดเตรียมออบเจ็กต์ค่าที่อยู่เริ่มต้นซึ่งสามารถใช้เป็นตัวอย่างหรือแมปโดยหลักคำสอน (ควรเป็นแบบฝังได้)
รูปแบบที่อยู่จะให้ข้อมูลต่อไปนี้:
ประเทศให้ข้อมูลต่อไปนี้:
ส่วนย่อยให้ข้อมูลต่อไปนี้:
เขตการปกครองเป็นแบบลำดับชั้นและสามารถมีได้ถึงสามระดับ: เขตการปกครอง -> ท้องถิ่น -> ท้องถิ่นที่ขึ้นอยู่กับ
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