NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Addresses for Laravel

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(): AddressOverí š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 kryptomien

Odoslaní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.