Bagaimana Validasi Pos-el (Email) pada Saat Mengubah Profil?


Di beberapa web, sebagian besar pengembangnya menyediakan fitur ubah pos-el (email) pada bagian profil. Entah apa urgensinya. Walaupun jarang digunakan dan sudah mulai jarang ditemukan pada aplikasi web saat ini, namun tidak ada salahnya untuk belajar membuat dan mengimplementasikannya. Toh, fitur serupa tidak hanya berlaku pada ubah pos-el tersebut, bisa berbagai kasus tentunya.

Untuk tulisan kali ini, fitur Laravel yang akan digunakan pada tutorial adalah Validation. Dan khusus fitur ini, kita akan memanfaatkan class Rule untuk validasi yang lebih fasih.

Baca juga artikel Tiga Cara Memvalidasi Form di Laravel agar tidak bingung dengan contoh validasi di tulisan ini.

Membuat Validasi

Untuk memastikan data tidak ganda, kita bisa membuat validasi dengan rule  unique:$table,$column, sebagai contoh:

$validator = Validator::make(request()->all(), [
    'email' => 'required|email|unique:users,email'
]);

Potongan skrip di atas lebih pas untuk registrasi, tapi tidak untuk fitur ubah pos-el. Kenapa? Karena saat disimpan, validasinya akan selalu gagal karena pos-el tersebut sudah terdaftar atas pengguna itu sendiri.

Ubah Profile

Validasi gagal ketik ubah profil

Maka dari itu, kita perlu menambahkan pengecualian pengecekan. Pengecualiannya dinilai berdasarkan data pengguna yang login saat itu.

Sebagai contoh, apabila email saya adalah dedy.yugo.purwanto@gmail.com dan ID pengguna saya adalah 1, maka pengecekan data unik mengabaikan data dengan ID 1. Tidak peduli data pos-elnya berubah ataupun tidak.

Potongan skrip pengecekannya adalah sebagai berikut:

$validator = Validator::make(request()->all(), [
    'name' => 'required|max:30',
    'email' => [
        'required',
        'email',
        Rule::unique('users')->ignore(Auth::id(), 'id')
    ]
]);

Contoh implementasi pada controller.

Perhatikan dari baris ke tiga, saya menggunakan rules dengan tipe data array daripada string seperti pada rules atribut name. Saya juga menambahkan rule menggunakan class Ruleuntuk memastikan pos-el harus unik tapi juga mengabaikan data pengguna itu sendiri.

Selain method unique(), class Rule juga menyediakan method lain seperti dimensions(), exists(), in(), dan notIn(). Tentunya penggunaan class Rule sendiri membuat skrip lebih mudah ditulis dan lebih rapi. Sebagai perbandingan, cobalah lihat dua skrip di bawah:

Tanpa menggunakan class Rule.

$options = ['first', 'two', 'three'];
$this->validate($request, [
    'option' => 'in:'.implode(',', $options)
]);

Menggunakan class Rule.

$options = ['first', 'two', 'three'];
$this->validate($request, [
    'option' => [
        Rule::in($options)
    ]
]);

Skrip kedua lebih nyaman dibaca dan diimplementasikan bukan? Iya in aja deh.

Ngomong-ngomong, class Rule ini tersedia dari versi 5.3. Untuk API lengkap class Rule, dapat dibaca langsung pada halaman berikut.

Contoh Aplikasi

Skrip lengkap contoh aplikasi dapat diklon dari repositori berikut: laravel-id/ignore-validation.

Sedangkan untuk demo, kalian dapat mengklik tautan ini. Untuk memastikan aplikai berjalan dengan benar, cobalah untuk mendaftar sebagai pengguna (usahakan menggunakan alamat pos-el palsu), kemudian klik menu “Change Profile”, dan coba untuk mengubah pos-el menjadi admin@email.com.

Terakhir, jangan lupa bagikan tulisan ini jika bermanfaat. 😉

***

Tulisan juga dapat dibaca pada Publikasi Medium Laravel Indonesia.

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

Tinggalkan Balasan