Eine PHP 8.0+-Adressierungsbibliothek, die auf CLDR und den Adressdaten von Google basiert.
Manipuliert Postadressen, um einen genauen Empfängerstandort für Versand- oder Rechnungszwecke zu ermitteln.
Merkmale:
Adressformate und Unterteilungen wurden ursprünglich über den Adressdatendienst von Google generiert und sind nun Eigentum der Bibliothek und werden von ihr verwaltet.
Schauen Sie sich auch commerceguys/intl für CLDR-gestützte Sprachen/Währungen/Zahlenformatierungen an.
Die Adressschnittstelle stellt eine Postadresse dar, mit Gettern für die folgenden Felder:
Feldnamen folgen dem OASIS eXtensible Address Language (xAL)-Standard.
Die Schnittstelle macht keine Annahmen über die Veränderlichkeit. Die implementierende Anwendung kann die Schnittstelle erweitern, um Setter bereitzustellen, oder ein Wertobjekt implementieren, das entweder den PSR-7-Stil mit* Mutatoren verwendet oder auf einem AddressBuilder basiert. Es wird ein Standardadresswertobjekt bereitgestellt, das als Beispiel verwendet oder von Doctrine zugeordnet werden kann (vorzugsweise als einbettbares Objekt).
Das Adressformat liefert folgende Informationen:
Das Land stellt folgende Informationen bereit:
Die Unterteilung liefert folgende Informationen:
Unterteilungen sind hierarchisch und können bis zu drei Ebenen haben: Verwaltungsgebiet -> Ort -> Abhängiger Ort.
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 ();
}
Adressen werden entsprechend dem Adressformat in HTML oder Text formatiert.
Formatiert eine Adresse für die Anzeige und fügt immer den lokalisierten Ländernamen hinzu.
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>
**/
Kümmert sich um die Großschreibung von Feldern, sofern das Format dies erfordert (um die automatisierte E-Mail-Sortierung zu erleichtern).
Erfordert die Angabe des Herkunftslandcodes, um zwischen Inlands- und Auslandspost unterscheiden zu können. Bei Inlandspost wird der Ländername überhaupt nicht angezeigt. Bei internationaler Post:
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
**/
Die Adressvalidierung basiert auf der Symfony Validator-Bibliothek.
Durchgeführte Kontrollen:
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 ());
}
Zonen sind territoriale Gruppierungen, die häufig für Versand- oder Steuerzwecke verwendet werden. Beispielsweise eine Reihe von Versandtarifen, die einer Zone zugeordnet sind und in der die Tarife nur dann verfügbar sind, wenn die Adresse des Kunden zu dieser Zone gehört.
Eine Zone kann Ländern, Untergebieten (Staaten/Provinzen/Gemeinden) und Postleitzahlen entsprechen. Postleitzahlen können auch mithilfe von Bereichen oder regulären Ausdrücken ausgedrückt werden.
Beispiele für Zonen:
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