Typy adries
Typ adresy je kľúč malými písmenami uložený v stĺpci type. Ktoré kľúče vaša aplikácia povoľuje, určuje addresses.types; predvolene obsahuje šesť vstavaných hodnôt enumu s reťazcovými hodnotami RoundlyConsulting\Addresses\Enums\AddressType, takže aplikácia, ktorá ho nenastaví, dostane presne tieto:
| Prípad | Hodnota | Anglický popisok |
|---|---|---|
AddressType::Default | default | Default |
AddressType::Billing | billing | Billing |
AddressType::Shipping | shipping | Shipping |
AddressType::Home | home | Home |
AddressType::Work | work | Work |
AddressType::Office | office | Office |
use RoundlyConsulting\Addresses\Enums\AddressType;
AddressType::Office->value; // 'office'
AddressType::Office->label(); // 'Office' ('Kancelárska' under the sk locale)
AddressType::cases(); // all six cases
AddressType::from('billing'); // AddressType::BillingVlastné typy
Vlastné kľúče uveďte v config/addresses.php. Zoznam je úplný zoznam povolených typov — vstavaný typ, ktorý vynecháte, sa odmietne rovnako ako neznámy kľúč. Kľúč tvoria malé písmená, číslice, - a _, najviac 255 znakov; vstup sa najprv oreže a prevedie na malé písmená, takže ' Registered ' je registered. Zoznamom je aj reťazec oddelený čiarkami (napríklad z env premennej) a null, prázdna hodnota či [] znamená šesť vstavaných typov. Chybne zapísaný zoznam vyhodí InvalidConfigurationException s názvom addresses.types:
// config/addresses.php — the whole allow-list: a built-in you leave out is refused too
'types' => [
'default',
'billing',
'registered' => 'Registered office', // a type and its label
'postal', // labelled "Postal"
'operating' => ['label' => 'Operating site'],
],Každý zápis prijme prípad AddressType alebo kľúč a nenakonfigurovaný typ odmietne výnimkou InvalidAddressTypeException. Čítania prijímajú kľúč tiež a nekontrolujú sa, takže záznamy typu, ktorý neskôr zo zoznamu odstránite, zostanú dostupné. Stĺpec type je obyčajný reťazec, preto netreba žiadnu migráciu:
use RoundlyConsulting\Addresses\Address;
use RoundlyConsulting\Addresses\DataTransferObjects\AddressData;
use RoundlyConsulting\Addresses\Facades\Addresses;
// every write takes an AddressType case or a configured key — anything else throws
Addresses::for($company)->new()->type('registered')->/* … */->save();
Addresses::for($company)->add(AddressData::make(/* … */, type: 'postal'));
$company->createAddress(/* … */, type: 'operating');
$address->type = 'postal'; // checked too
Address::factory()->ofType('registered')->create();
// reads take a key as well and are not checked, so rows of a removed type stay reachable
Addresses::for($company)->ofType('registered');
Addresses::for($company)->primary('registered');
$company->primaryAddress('registered');
Address::query()->where('type', 'registered'); // scopeOfType() stays enum-only for nowČítanie typu
$address->type sa pri vstavanom kľúči číta ako prípad AddressType a pri vlastnom ako uložený reťazec; typeKey() vráti reťazec v oboch prípadoch a toArray() aj AddressResource vždy vypíšu kľúč. Ak potrebujete len uloženú hodnotu, použite typeKey():
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Facades\Addresses;
$billing->type; // AddressType::Billing — a built-in reads as the case
$registered->type; // 'registered' — a custom type reads as the key
$registered->typeKey(); // 'registered' — always the stored string
$registered->typeLabel(); // 'Registered office'
Addresses::types(); // ['default', 'billing', 'registered', 'postal', 'operating']
Addresses::typeLabel('registered'); // 'Registered office'
Addresses::typeLabel('head_office'); // 'Head Office' — a headline of the key
AddressType::Billing->label(); // 'Billing' ('Fakturačná' under the sk locale)Popisky
Addresses::typeLabel(), $address->typeLabel() aj AddressType::label() hľadajú popisok v tomto poradí: popisok nakonfigurovaný v addresses.types (prepíše aj vstavaný), preklad addresses::types.<kľúč> (pre šesť vstavaných typov sa dodáva angličtina a slovenčina, takže popisky sa riadia jazykom aplikácie) a napokon kľúč prevedený na nadpis (head_office → Head Office). Ak chcete pridať jazyk alebo preložiť vlastný kľúč, publikujte preklady:
php artisan vendor:publish --tag="addresses-translations"Vstup z requestu
Validujte pravidlom Rules\ValidAddressType: prepustí presne to, čo by prijal balík — nakonfigurovaný kľúč (orezaný, bez ohľadu na veľkosť písmen) alebo prípad AddressType — a jeho správa je preklad addresses::validation.type. Ak chcete nedôveryhodný reťazec previesť sami, Support\AddressTypes::resolve() vráti prípad enumu alebo kľúč a pri nenakonfigurovanom type vyhodí InvalidAddressTypeException:
use RoundlyConsulting\Addresses\Rules\ValidAddressType;
use RoundlyConsulting\Addresses\Support\AddressTypes;
// validate: passes exactly the types configured in addresses.types
$request->validate(['type' => ['required', new ValidAddressType]]);
// …or resolve an untrusted string yourself
$type = AddressTypes::resolve($input); // the case or the key; throws InvalidAddressTypeExceptionMožnosti pre výber
Addresses::types() vráti nakonfigurované kľúče a Addresses::typeLabel() každému priradí popisok v aktuálnom jazyku — hotový výber typu do formulára:
use RoundlyConsulting\Addresses\Facades\Addresses;
$options = collect(Addresses::types())
->mapWithKeys(fn (string $type) => [$type => Addresses::typeLabel($type)])
->all();
// ['default' => 'Default', 'billing' => 'Billing', 'registered' => 'Registered office', …]Zatiaľ len vstavané typy
Address::scopeOfType() a kontrakt Addressable stále prijímajú AddressType, aby existujúce podtriedy a implementácie ďalej fungovali; kľúč prijmú až od ďalšej major verzie. Dovtedy vlastný typ dopytujte cez Addresses::for($owner)->ofType('registered') alebo ->where('type', 'registered'). Support\DefaultAddressType::type() vráti predvolený typ ako prípad enumu alebo kľúč; staršia metóda resolve() vyhodí InvalidAddressTypeException, ak je predvoleným typom vlastný typ.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.