TR
Başlangıç
75 · Formlar

Form koruması

Kaydedilmemiş değişiklik koruması olan form. dirty-check açıkken alanlar değiştiyse sayfadan ayrılmak onay ister: tarayıcı çıkışlarında tarayıcının kendi uyarısı, wire:navigate geçişlerinde acun:form-guard-dialog penceresi.

PRO acun:form · acun:form-guard-dialog
01

Temel kullanım

acun:form normal bir <form> çizer; dirty-check korumayı açar. Koruma, alanların şimdiki değerlerini sayfa açıldığındaki değerlerle karşılaştırır: bir alanı değiştirip eski değerine döndürürseniz form yeniden "temiz" sayılır. Aşağıdaki durum satırı bu karşılaştırmanın sonucunu (AcunUI.pro.formGuard.dirty) gösterir. Eski ad window.formDirty de aynı değeri verir.

CANLI ÖRNEK
<acun:form dirty-check class="space-y-4"
    x-data="{ degisti: false }"
    x-on:input="setTimeout(() => degisti = AcunUI.pro.formGuard.dirty)"
    x-on:change="setTimeout(() => degisti = AcunUI.pro.formGuard.dirty)">
    <acun:input name="musteri_adi" label="Müşteri adı" value="Ayşe Yılmaz" />
    <acun:checkbox name="aktif" label="Aktif müşteri" checked />
    <p class="text-sm text-gray-500 dark:text-zinc-400" x-text="degisti ? 'Kaydedilmemiş değişiklik var' : 'Değişiklik yok'"></p>
</acun:form>
PropDeğerler
dirty-checktrue | false
02

Livewire formu

Livewire formlarında wire:submit gibi öznitelikler doğrudan forma geçer. Livewire güncellemesiyle sonradan eklenen korumalı formlar da kendiliğinden izlenmeye başlar.

BLADE
<acun:form wire:submit="kaydet" dirty-check class="space-y-4">
    <acun:input wire:model="musteri_adi" label="Müşteri adı" />
    <acun:select wire:model="ilce_id" label="İlçe" :options="$ilceler" />
    <acun:button type="submit">Kaydet</acun:button>
</acun:form>
03

Kayıttan sonra

Kayıt başarıyla bittiğinde ya da forma başka bir kayıt yüklendiğinde form-saved olayını gönderin; formların o anki değerleri yeni başlangıç kabul edilir. acun:modal kapanırken yalnızca kendi içindeki formlar kendiliğinden sıfırlanır.

PHP
public function kaydet(): void
{
    $this->validate();

    $this->musteri->update($this->only(['musteri_adi', 'ilce_id']));

    $this->dispatch('form-saved');
}
PropDeğerler
form-savedOlay; tüm korumalı formları temiz kabul eder
acun:modal:closedOlay; acun:modal kapanınca gönderir (eski adı modal-closed da gönderilir), içindeki formları sıfırlar
04

İşlem çubuğu

acun:form-actions (PRO) forma konunca kendini içindeki forma bağlar; ek nitelik gerekmez. Kaydet yalnızca bir alan değişince, Önceki/Sonraki/Ekle/Sil yalnızca kayıtlı ve temiz bir kayıtta açılır. Vazgeç formu son temiz değerlerine döndürür (wire:model değerleri, seçim kutusu ve etiket girişi dahil); cancel="vazgec" verilirse bunun yerine o Livewire metodu çağrılır ve dönen değerler yeni temiz durum sayılır. sticky uzun formlarda çubuğu ekranın altında tutar; formun sonunda yer kapladığı için yapıştığında sayfada hiçbir şey kaymaz. Forma id verirseniz InteractsWithFormModal olayları (formRecordLoaded('urun-formu'), formSaved('urun-formu')) çubuğun durumunu günceller ve korumanın başlangıç değerlerini de yeniler.

BLADE
<acun:form id="urun-formu" wire:submit="kaydet" dirty-check class="space-y-6">
    <acun:input wire:model="ad" label="Ürün adı" required />
    <acun:combobox wire:model="etiketler" label="Etiketler" multiple :options="$etiketListesi" />

    <acun:form-actions sticky cancel="vazgec">
        <p class="text-xs text-gray-500 dark:text-zinc-400">{{ $ad }}</p>
    </acun:form-actions>
</acun:form>
PropDeğerler
stickyEkranın altında kalan çubuk
canceltrue: son temiz değerler · "vazgec": Livewire metodu
slotÇubuğun başındaki durum satırı
05

Neler sayılır

Karşılaştırmaya formdaki alanlar girer; data-dirty-ignore taşıyan alanlar (ya da bu niteliği taşıyan bir kapsayıcının içindekiler) sayılmaz. Gerçek bir form alanı olmayan bileşenler (acun:combobox, acun:tag-input, acun:rating, acun:input-otp) wire:model ile bağlandığında değeri özelliğin adıyla gizli alanlarda tutar ve kullanıcı değiştirince change olayı yayınlar; arama ve yazı kutuları ile kod kutuları sayılmaz.

BLADE
<acun:form wire:submit="kaydet" dirty-check>
    <acun:tag-input wire:model="anahtarKelimeler" label="Anahtar kelimeler" />
    <input type="search" placeholder="Listede ara" data-dirty-ignore>
</acun:form>
PropDeğerler
data-dirty-ignoreAlan ya da kapsayıcı; değişikliği sayılmaz
06

Onay penceresi

Değişiklik varken wire:navigate ile başka bir sayfaya geçilmek istenirse geçiş durdurulur ve acun:form-guard-dialog açılır; "Devam Et" geçişi tamamlar. acun:layout.sidebar ve acun:layout.horizontal bu pencereyi zaten içerir; kendi düzeninizde bir kez ekleyin. Yenileme, sekme kapatma gibi tarayıcı çıkışlarında tarayıcının kendi uyarısı çıkar. Bu örnekte pencere düğmeyle açılıyor.

CANLI ÖRNEK
<acun:button variant="white" x-data x-on:click="$dispatch('form-guard-confirm', { url: null })">Pencereyi göster</acun:button>

<acun:form-guard-dialog />
API

Prop'lar ve slot'lar

Bileşenin kabul ettiği değerler.

PropVarsayılanAçıklama
form: dirty-checkfalseKaydedilmemiş değişiklik korumasını açar (data-dirty-check)
form-actions: stickyfalsePRO: çubuk ekranın altında kalır (yer kaydırmadan)
form-actions: canceltruePRO: Vazgeç son temiz değerlere döner; metot adı verilirse o Livewire metodu çağrılır
form-guard-dialog — Prop almaz; düzene bir kez eklenir (hazır düzenlerde ekli)
Slot'lar: form: varsayılan (form alanları)
Acun UI · Form korumasıDetaylı kullanım ve örnekler