Fluentný builder
Addresses::for($model)->new() aj $model->newAddress() vracajú PendingAddress. Zreťazte polia a save() adresu uloží a vráti. Kódy krajín sa normalizujú automaticky a adresa bez type() dostane nakonfigurovaný default_type:
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Facades\Addresses;
Addresses::for($payer)->new()
->type(AddressType::Office)
->name('HQ')
->primary()
->in('Bratislava')->at('Somewhere 1')->postalCode('81101')->country('sk')
->meta(['floor' => 3])
->save();
// or from the model
$payer->newAddress()
->type(AddressType::Home)
->in('Košice')->at('Main 2')->postalCode('04001')->country('SK')
->save();Metódy buildera
| Metóda | Účinok |
|---|---|
type(AddressType $type) | Typ adresy — bez neho nakonfigurovaný default_type. |
name(string $name) | Voliteľný názov, napr. HQ; prázdny názov sa uloží ako null. |
in(string $city) | Mesto — povinné. |
at(string $street) | Ulica — povinná. |
postalCode(string $postalCode) | PSČ — povinné. |
country(string $country) | ISO kód krajiny — povinný; pri uložení sa normalizuje. |
primary(bool $isPrimary = true) | Primárna adresa svojho typu; ostatným sa príznak zruší pri uložení, v tej istej transakcii. |
meta(iterable $meta) | Ľubovoľné doplnkové údaje, zabalené do Collection a uložené ako JSON. |
save(): Address | Overí štyri povinné polia, pridá adresu cez adresár vlastníka a vráti ju. |
Povinné polia
Mesto, ulica, PSČ a krajina sú povinné. Ak zavoláte save() bez všetkých štyroch — alebo s prázdnou hodnotou — vyhodí sa IncompleteAddressException so zoznamom všetkých chýbajúcich polí:
use RoundlyConsulting\Addresses\Exceptions\IncompleteAddressException;
try {
$customer->newAddress()->in('Bratislava')->save();
} catch (IncompleteAddressException $e) {
$e->getMessage();
// 'The address is missing required field(s): [street, postalCode, country].'
}Čo robí save()
Nazbierané polia prejdú cez AddressData::make() — reťazce sa orežú, prázdny názov sa zmení na null, krajina sa normalizuje a chýbajúci typ nahradí default_type — a save() výsledok pridá cez adresár vlastníka, takže ho vidí aj Addresses::fake(). CreateAddressAction vloží záznam cez polymorfný vzťah vlastníka a ak ste nastavili primary(), v tej istej transakcii ho povýši a ostatným adresám rovnakého typu príznak zruší. Potom sa odošle AddressCreated a pri povýšení aj PrimaryAddressChanged.
Addresses::for() prijme akýkoľvek Eloquent model — trait HasAddresses potrebujete len pre pomocníkov na strane modelu.
Z requestu
use App\Models\Customer;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Http\Resources\AddressResource;
final class CustomerAddressController
{
public function store(Request $request, Customer $customer): AddressResource
{
$data = $request->validate([
'type' => ['required', Rule::enum(AddressType::class)],
'city' => ['required', 'string', 'max:255'],
'street' => ['required', 'string', 'max:255'],
'postal_code' => ['required', 'string', 'max:255'],
'country' => ['required', 'string', 'min:2', 'max:3'],
'primary' => ['boolean'],
]);
$address = $customer->newAddress()
->type(AddressType::from($data['type']))
->in($data['city'])
->at($data['street'])
->postalCode($data['postal_code'])
->country($data['country']) // 'sk' is stored as 'SK'
->primary($request->boolean('primary'))
->save();
return AddressResource::make($address);
}
}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.