Validasi Data di Laravel: Nyaman dan Kuat

Diterbitkan: 2023-05-03

Sekarang, lebih dari sebelumnya, data dalam aplikasi Anda harus valid, akurat, dan memenuhi semua persyaratan sistem. Ini mengatasi kebutuhan untuk menjaga konsistensi data dan menghindari kerentanan keamanan.

Laravel membuat validasi data menjadi mudah dan intuitif. Ini mengikuti arsitektur model view controller (MVC) dan hanya membutuhkan pengetahuan umum tentang PHP dan konsep pemrograman berorientasi objek (OOP). Selain itu, Laravel menawarkan beberapa metode untuk memvalidasi data yang masuk.

Jelajahi beberapa pendekatan ini dan cara menerapkan aturan validasi ke kumpulan data Anda.

Validasi Data Menjadi Mudah di Laravel

Laravel menyediakan beberapa aturan validasi siap pakai ketika pengguna aplikasi Anda mengirimkan data melalui formulir. Anda dapat menandai bidang input sesuai kebutuhan, menetapkan panjang minimum atau maksimum, dan memerlukan entri unik (non-duplikat) dan alamat email yang valid. Validator Laravel memeriksa apakah input memenuhi aturan ini atau aturan lain yang Anda tentukan.

Aturan validasi Laravel ini meliputi:

  • required — Data bidang tidak boleh nol atau kosong.
  • array — Data bidang harus berupa larik PHP.
  • bail — Aturan validasi berhenti dijalankan setelah menemui kegagalan validasi pertamanya.
  • email — Data bidang harus berupa alamat email yang valid.
  • unique — Data lapangan tidak boleh memiliki duplikat di tabel database.

Semua metode validasi memiliki pro dan kontra, tetapi keragamannya memungkinkan Anda memilih pendekatan terbaik untuk kebutuhan Anda. Tergantung pada metode yang Anda pilih, validasi Laravel dapat terjadi dalam beberapa cara, dengan pesan kesalahan manual atau otomatis.

Metode yang paling umum adalah kode>validasi, digunakan untuk permintaan HTTP yang masuk. Metode ini dirantai ke data permintaan, menjalankan aturan validasi. Anda dapat memisahkan aturan untuk setiap kolom dengan koma, seperti yang terlihat pada contoh di bawah ini.

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

Di sini, email adalah masukan yang diperlukan, artinya tidak boleh nol. Selain itu, harus unik di tabel database users , memastikan alamat email yang sama tidak didaftarkan dua kali. Aturan terakhir menyatakan bahwa alamat email juga harus valid. Jika tidak, proses validasi berhenti. Bidang nama wajib diisi tetapi tidak memiliki aturan lain.

Jika ada aturan validasi Laravel yang gagal, respons dihasilkan secara otomatis.

Jangan biarkan satu kesalahan data merusak semua kerja keras Anda! Validasi data Anda dan jaga agar proyek Anda aman dan sehat ️ Klik untuk Tweet

Dasar Validasi

Untuk lebih memahami metode validasi, perhatikan contoh berikut. Anda akan menentukan rute untuk titik akhir dan membuat pengontrol untuk memvalidasi dan memproses data permintaan.

Pertama, buat titik akhir sederhana yang memungkinkan pengguna menyimpan email dan kata sandi mereka.

Tentukan Rute

Rute Laravel didefinisikan dalam file rute/web.php untuk aplikasi web atau rute/api.php untuk API. Untuk contoh ini, gunakan api.php :

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

Buat Pengontrol

Jalankan perintah Artisan ini untuk membuat pengontrol:

 php artisan make:controller UserController

Perintah ini membuat file UserController.php di direktori app/Http/Controllers .

Sekarang, tentukan metode store untuk memvalidasi data yang memasuki titik akhir penyimpanan sebelum menyimpannya.

Contoh ini akan memvalidasi kolom berikut menggunakan aturan berikut:

  • email — Harus unik, email yang valid, dan wajib diisi
  • kata sandi — Harus memiliki panjang minimum, konfirmasi kata sandi, dan harus diminta
  • usia — Harus berupa angka dan wajib diisi
 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

Aturan confirmed memungkinkan Anda meminta bidang tertentu dua kali untuk memverifikasi bahwa datanya akurat, seperti pengguna memasukkan kembali kata sandi mereka saat pendaftaran. Aturan ini memerlukan bidang bernama password_confirmation , yang datanya harus cocok dengan bidang kata sandi .

Menampilkan Pesan Kesalahan

Jika kriteria validasi terpenuhi, kode Anda akan terus berjalan normal. Jika validasi gagal, pengecualian IlluminateValidationValidationException dilemparkan, dan respons kesalahan yang sesuai dikembalikan.

Contoh ini didasarkan pada API, yang mengembalikan respons HTTP 422 Unprocessable Entity dalam format JSON. Untuk aplikasi web, itu akan dialihkan ke URL sebelumnya untuk menampilkan pesan kesalahan, dan data permintaan di-flash ke sesi.

Anda dapat menggunakan variabel $errors dalam tampilan Anda untuk menampilkan kesalahan yang dikembalikan:

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

Anda juga dapat memilih untuk hanya melihat kesalahan pertama atau mengulang untuk melihat semuanya.

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

Mengisi Ulang Formulir

Mengisi ulang formulir menyelamatkan pengguna dari mengetik ulang informasi sehingga mereka dapat fokus memperbaiki kesalahan. Dalam contoh alamat email yang gagal, Anda dapat mengisi ulang sisa formulir dengan memanggil nilai lama untuk bidang name .

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

Aturan ini akan mengembalikan null jika tidak ada masukan sebelumnya.

Validasi Lanjutan

Laravel menyediakan metode lain untuk menulis validasi yang disebut form request. Permintaan formulir adalah kelas permintaan khusus yang mengatur validasi dan mendeklarasikan pengontrol Anda.

Mereka memiliki logika validasi dan otorisasi sendiri yang cocok untuk volume input besar dan dapat digunakan untuk menentukan aturan validasi dan menyesuaikan pesan kesalahan.

Untuk membuat permintaan formulir, jalankan perintah Artisan ini:

 php artisan make:request StoreUserRequest

Perintah ini membuat file StoreUserRequest.php di direktori app/Http/Requests dan berisi dua metode default:

  • rules mengembalikan aturan validasi untuk data permintaan.
  • authorize mengembalikan boolean untuk menunjukkan apakah pengguna tersebut memiliki izin untuk melakukan tindakan yang diminta.

Konversikan contoh sebelumnya untuk menggunakan permintaan formulir.

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

Untuk menyesuaikan pesan kesalahan dari aturan ini, Anda dapat mengganti metode pesan di kelas FormRequest .

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

Catatan: Nama data dan aturan validasi dipisahkan dengan tanda titik (.) sebelum data pesan.

Validasi Kustom

Untuk membuat validasi khusus, Anda dapat menggunakan fasad Validator alih-alih validate . Instance validator berisi dua argumen: data yang akan divalidasi dan larik aturan validasi. Kedua argumen ini diteruskan ke metode ::make pada fasad validator, menghasilkan instance validator baru.

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

Jika Anda ingin menambahkan direct otomatis, Anda dapat menjalankan metode validate pada instance validator yang sudah ada sebelumnya. Jika validasi gagal, permintaan XHR menghasilkan respons JSON dengan 422 Unprocessable Entity sebagai kode status, atau pengguna akan segera dialihkan.

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

Anda juga dapat menyesuaikan pesan kesalahan dengan meneruskan argumen ketiga yang disebut messages ke Validate::make method :

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

Catatan: :attribute diganti dengan nama bidang di bawah validasi.

Bekerja dengan data dalam jumlah besar dapat dengan cepat lepas kendali. Lindungi proyek Anda (dan kewarasan Anda!) dengan validasi Laravel. Begini caranya Klik untuk Tweet

Ringkasan

Melakukan validasi data sangat penting untuk menjaga dataset Anda tetap bersih, benar, dan lengkap. Validasi data memungkinkan Anda menghilangkan kesalahan dalam data yang berpotensi merusak atau memengaruhi proyek Anda. Validasi menjadi semakin penting saat bekerja dalam skala besar dan dengan data dalam jumlah besar.

Laravel memungkinkan banyak pendekatan fleksibel untuk memastikan integritas dan keakuratan data yang melewati aplikasi Anda. Anda dapat mencapai logika validasi yang rumit dengan metode default dan dapat disesuaikan, membuat basis kode Anda terstruktur dengan baik dan lebih mudah digunakan kembali.

Kirimkan aplikasi Laravel Anda lebih cepat dengan layanan hosting aplikasi Kinsta.