Menambahkan Validasi Pada Form Livewire

Senin, 14 Oktober 2024
Menambahkan Validasi Pada Form Livewire

Setelah berhasil menambahkan data melalui form, ada hal yang terlewatkan pada form yang sudah kita buat, yaitu validasi untuk data yang akan dimasukkan.

Pada Livewire 3 ini ada sedikit perbedaan untuk validasinya, walaupun kita tetap bisa menggunakan cara yang sudah ada sejak Livewire 2 seperti ini:

public function addBook()
{
	$this->validate([
        'title' => ['required'],
        'author' => ['required']
    ]); 

    Book::create([
        'title' => $this->title,
        'author' => $this->author,
    ]);

    $this->reset(['title', 'author']);

    $this->dispatch('book-created');
}

Baik, dengan seperti ini form kita sudah tidak bisa diisi dengan isian yang kosong, artinya validasinya sudah berhasil, tinggal kita tambahkan pada view agar pengguna mendapatkan feedback dari validasinya.

<div>
    <form action="" class="flex flex-col space-y-2" wire:submit.prevent="addBook">
        <input class="rounded-lg border border-gray-500 p-2" name="title" placeholder="Isi dengan judul buku"
            type="text" wire:model="title">
 			@error('title')
            {{ $message }}
        @enderror
        <input class="rounded-lg border border-gray-500 p-2" name="author" placeholder="Isi dengan penulis buku"
            type="text" wire:model="author">
			@error('author')
            {{ $message }}
        @enderror 
        <button class="rounded-lg bg-teal-500 p-2 text-white">Tambah</button>
    </form>
</div>

Ketika sudah ditambahkan maka akan ada pesan error dari validasinya seperti di bawah ini, untuk styling bisa disesuaikan sendiri ya :P

image-20241014102326464

Nah, lalu apa perbedaannya untuk Livewire 3 ini? Jadi, untuk Livewire 3 ini validasi bisa dilakukan menggunakan atribut Validate.

<?php

namespace App\Livewire\Book\Components;

use App\Models\Book;
use Livewire\Attributes\Validate;
use Livewire\Component;

class BookForm extends Component
{
	#[Validate('required')] 
    public $title;

 	#[Validate('required')] 
    public $author;

    public function addBook()
    {
			$this->validate(); 

        Book::create([
            'title' => $this->title,
            'author' => $this->author,
        ]);

        $this->reset(['title', 'author']);

        $this->dispatch('book-created');
    }
}

Untuk validasi dengan atribut ini tidak mendukung object Rules dari validasi Laravel ya, untuk atribut ini juga bisa kustomisasi pesan error, mengganti nama atribut, mendefinisikan kapan validasi dijalankan, dll, selengkapnya bisa dibaca di Livewire Validation.

Berikutnya, kita akan tambahkan pagination pada aplikasi kita, tentunya paginationnya juga tanpa reload ya.

Belum ada komentar di sini