Validasi kolom formulir umpan balik. Menggunakan variabel string lainnya. Mari buat proyek uji

Validasi adalah memeriksa nilai ditentukan oleh pengguna, dan menampilkan kesalahan yang ditemukan.

Prinsip

Tugas desainer adalah memastikan pengguna tidak melakukan kesalahan dan tidak diperlukan validasi, untuk itu:

  1. Batasi pemilihan nilai yang jelas-jelas salah dalam daftar: blokir nilai-nilai ini atau jangan tampilkan dalam daftar.
  2. Batasi masukan karakter yang tidak pantas. Jika suatu bidang hanya memerlukan angka untuk dimasukkan dan ini terlihat jelas bagi pengguna, abaikan huruf tersebut alih-alih menampilkan kesalahan. Gunakan masker di bidang yang nilainya memiliki format yang diketahui.
  3. Tulis petunjuk untuk mengisi formulir. Misalnya, placeholder di kolom input.

Validasi pada formulir kosong yang baru dibuka dilarang. Pengecualian adalah draf, ketika pengguna telah mengisi formulir ini, kembali ke formulir tersebut setelah beberapa waktu, dan diisi dengan kesalahan.

Jenis Validasi

Ada tiga jenis validasi: instan, saat fokus hilang, dan saat formulir diserahkan.

Semakin cepat antarmuka melaporkan kesalahan, semakin baik - lebih mudah bagi pengguna untuk kembali dan memperbaiki kesalahan tersebut.

Paling cara cepat laporkan kesalahan - validasi instan. Namun hal ini hanya mungkin terjadi jika selama proses input terlihat jelas bahwa nilainya salah. Biasanya, kesalahan seperti itu dikaitkan dengan tata letak keyboard yang salah (Sirilik, bukan Latin) atau memasukkan huruf ke dalam bidang numerik (TIN, KPP, dll.). Untuk kasus ini, kami menggunakan bidang dengan topeng: memasukkan karakter yang tidak sesuai ke dalamnya diblokir. Oleh karena itu, di antarmuka kami hanya ada dua jenis validasi:

  • karena kehilangan fokus- jenis validasi utama
  • setelah menyerahkan formulir- untuk kasus di mana validasi berdasarkan kehilangan fokus tidak mungkin dilakukan.

Validasi kehilangan fokus

Kapan harus digunakan

Bagaimana cara kerjanya

Jangan memvalidasi kolom yang kosong karena kehilangan fokus - jangan tampilkan kesalahan jika kolom tidak diisi, mungkin pengguna akan kembali dan mengisi kolom tersebut nanti. Dalam kasus seperti ini, Anda hanya dapat menampilkan kesalahan setelah mengirimkan formulir.

Validasi diaktifkan segera setelah kehilangan fokus jika nilai di kolom terisi. Jika kesalahan ditemukan, bidang tersebut disorot dengan warna merah. Fokus tidak otomatis kembali ke bidang ini:

Teks kesalahan muncul di tooltip ketika bidang menerima arahan atau fokus:

Bidang kesalahan harus tetap disorot jika menerima fokus, nilainya tidak diperbaiki, dan kemudian kehilangan fokus.

Sorotan merah dihapus dari bidang segera setelah pengguna mulai memperbaiki nilai yang salah.

Validasi saat mengirimkan formulir

Kapan harus digunakan

Gunakan jenis validasi ini ketika bidang tidak dapat divalidasi karena kehilangan fokus. Misalnya, untuk memeriksa apakah kolom wajib diisi.

Bagaimana cara kerjanya

Pemeriksaan terjadi setelah pengguna menekan tombol kirim: semua bidang dengan kesalahan pada formulir disorot, halaman bergulir ke bidang pertama yang mengalami kesalahan, fokus berpindah ke bidang ini, kursor berpindah ke akhir baris, dan keterangan alat dengan petunjuk muncul di sebelah bidang.

Saat menggulir ke bidang pertama dari batas atas jendela ke bidang kesalahan, indentasi 50 px tetap ada.

Memblokir tombol kirim

Dalam formulir kecil, alih-alih memeriksa apakah kolom wajib diisi, Anda dapat memblokir tombol kirim formulir. Gunakan perilaku ini jika sudah jelas mengapa tombol kirim formulir berwarna abu-abu. Misalnya pada form login:

Setelah semuanya terisi bidang yang diperlukan- tombol menjadi aktif. Jika setelah ini pengguna menghapus nilai di salah satu bidang, tombol tersebut akan menjadi tidak aktif lagi.

Pesan kesalahan

Kesalahan dapat dilaporkan dengan dua cara:

Tipe alat

Bagaimana cara kerjanya

Keterangan alat dengan keterangan alat muncul dalam dua kasus:

  1. Saat menunjuk ke bidang yang mengalami kesalahan.
  2. Saat bidang dengan kesalahan menerima fokus.

Tooltip hover tumpang tindih dengan tooltip fokus.


Tooltip dapat muncul di atas atau di sebelah kanan kontrol dengan kesalahan, sehingga tidak tumpang tindih dengan informasi berguna:


Keseragaman tingkah laku dan penampilan

Tampilkan keterangan alat di sebelah kanan bidang. Jika dalam kasus ini keduanya tumpang tindih dengan konten penting di halaman, tampilkan tooltips di atas. Pertahankan konsistensi, tapi ingat bahwa konten lebih penting daripada konten.

Teks merah di halaman

Bagaimana cara kerjanya

Teks kesalahan berwarna merah muncul segera setelah kesalahan terjadi dan bidang disorot, dan menghilang segera setelah sorotan bidang menghilang.

Tampilkan teks kesalahan di sebelah kanan jika ada ruang pada formulir dan pesannya sendiri pendek. Dengan cara ini Anda tidak perlu memperluas formulir untuk menampilkan kesalahan.

Jika tidak ada ruang untuk teks di sebelah kanan bidang, luaskan formulir dan tampilkan pesan di bawah bidang.


Pada formulir yang lebih kompleks, tampilkan pesan kesalahan di tooltip.

Validasi bidang dependen

Bidang dependen adalah bidang yang nilainya bergantung satu sama lain.

Kami menunjukkan kesalahan yang terkait dengan pelanggaran ketergantungan bidang setelah mengirimkan formulir. Misalnya NPWP dan pos pemeriksaan. Jika pengguna menentukan TIN 10 digit dan membiarkan kolom pos pemeriksaan kosong, setelah mengirimkan formulir, kolom pos pemeriksaan yang kosong akan disorot.

NPWP dapat terdiri dari dua jenis:

  • 10 digit kamu badan hukum
  • 12 digit untuk pengusaha perorangan.

Jika pengguna menunjukkan NPWP 12 digit, maka organisasi tersebut merupakan pengusaha perorangan dan tidak memiliki pos pemeriksaan, sehingga tidak perlu mengisi kolom pos pemeriksaan. Begitu pula sebaliknya, jika pos pemeriksaan sudah diisi, tetapi NPWP 12 digit, bisa jadi NPWP yang dicantumkan salah.

Penyorotan bidang dependen menghilang segera setelah pengguna mulai mengoreksi nilai di salah satu bidang ini.

Jika format nilai salah saat mengisi bidang dependen, laporkan kesalahan tersebut saat Anda kehilangan fokus. Misalnya, pengguna memasukkan 3 digit pada kolom TIN dan menghapus fokus. Bidang seperti itu harus segera disorot.

Contoh

Ada formulir dengan 5 bidang:

  • Nama organisasi- teks sederhana, wajib
  • TIMAH- 10 atau 12 digit, periksa checksum karena kehilangan fokus, wajib
  • pos pemeriksaan- 9 digit dengan verifikasi checksum kehilangan fokus, wajib jika NPWP terdiri dari 10 digit
  • E-mail- alamat email, periksa kehilangan fokus menggunakan topeng [dilindungi email], opsional
  • Telepon- format internasional, periksa hilangnya fokus menggunakan masker +00000000000, wajib diisi

Dari penulis: Saat Anda mengumpulkan informasi dari pengguna menggunakan formulir, setidaknya menggunakan beberapa jenis validasi data adalah suatu keharusan. Jika Anda tidak memperhatikan saat ini, maka hal ini dapat mengakibatkan hilangnya pelanggan, rusaknya data pada database (DB) bahkan munculnya celah keamanan pada website Anda. Secara historis, validasi formulir selalu memusingkan. Ini lebih mudah dilakukan di sisi server berkat kerangka kerja lengkap yang akan melakukan segalanya untuk Anda, tetapi di sisi klien hal ini paling sering berakhir. menggunakan JavaScript perpustakaan yang membutuhkan banyak upaya untuk diintegrasikan.

Untungnya, HTML5 menyediakan beberapa fitur yang dapat menyelesaikan sebagian besar masalah validasi formulir Anda. Formulir di HTML5 kini memiliki dukungan bawaan untuk validasi melalui penggunaan atribut khusus dan tipe elemen masukan baru. Ini juga memberi Anda kontrol lebih besar atas penataan formulir Anda melalui CSS.

Lihatlah contoh validasi formulir online dan baca terus untuk mengetahui contekan singkat tentang dasar-dasar validasi formulir dalam HTML5.

Jenis Elemen Input Khusus

HTML5 memperkenalkan beberapa tipe elemen masukan baru. Mereka dapat digunakan untuk membuat kolom masukan yang hanya akan menerima jenis data tertentu. Berikut tipe-tipe baru yang muncul di HTML5:

Untuk menggunakan salah satu tipe baru, tentukan namanya sebagai nilai atribut type:

< input type = "email" / >

Jika browser tidak mendukung tipe ini elemen input, maka elemen saat ini akan berperilaku seperti kolom input teks biasa. Mungkin juga bermanfaat bagi Anda untuk mengetahui bahwa beberapa jenis bidang (seperti "email" dan "telp") menghasilkan kolom terbuka perangkat seluler keyboard khusus dengan serangkaian tombol terbatas daripada tata letak QWERTY penuh. Lagi informasi rinci Anda dapat menemukan informasi tentang semua jenis elemen input di situs web MDN -.

Bidang yang wajib diisi

Cukup menambahkan atribut "wajib" ke elemen input, pilih, atau textarea akan memberi tahu browser bahwa ia memilikinya bidang ini pasti ada maksudnya. Anggap saja seperti tanda bintang merah* yang kita lihat di sebagian besar formulir pendaftaran.

< input type = "checkbox" name = "terms" required >

Masalahnya di sini adalah hampir semua informasi akan memenuhi persyaratan ini, misalnya, Anda dapat lolos validasi hanya dengan memberi spasi (kami akan menunjukkan cara menghindarinya).

Saat Anda menentukan atribut yang diperlukan pada bidang seperti email atau url, browser mengharapkan adanya pola tertentu yang dapat digunakan untuk memvalidasi informasi, namun validasi ini sangat lunak dan meleset. alamat email seperti “z@zz” (baca terus untuk mengetahui cara mengatasinya).

Batasan

Kita dapat menetapkan batasan dasar seperti panjang maksimum atau minimal dan nilai maksimum untuk bidang numerik. Untuk membatasi panjang elemen input atau textarea, gunakan atribut "maxlength". Hal ini dilakukan agar secara umum tidak mungkin memasukkan string yang lebih panjang dari nilai atribut “maxlength”. Jika Anda mencoba memasukkan garis yang melebihi batas, formulir akan terpotong begitu saja.

Pendaftaran

Kelas semu CSS3 memungkinkan kita menata bidang formulir apa pun bergantung pada statusnya. Berikut adalah kelas semunya:

Ini berarti bidang wajib Anda mungkin terlihat berbeda, bidang opsional Anda terlihat berbeda, dan seterusnya. Dalam demo kami, kami menggabungkan pemilih "valid" dan "tidak valid" dengan kelas semu "fokus" untuk mewarnai bidang formulir dengan warna merah dan warna hijau, saat pengguna memilihnya dan mulai mengetik sesuatu ke dalamnya.

masukan:fokus:tidak valid, area teks:fokus:tidak valid( perbatasan:solid 2px #F5192F; ) masukan:fokus:valid, area teks:fokus:valid( perbatasan:solid 2px #18E109; warna latar:#fff; )

masukan: fokus: tidak valid,

area teks : fokus : tidak valid (

batas : solid 2px #F5192F;

masukan: fokus: valid,

area teks : fokus : valid (

batas : padat 2px #18E109;

latar belakang - warna : #fff;

Keterangan alat

Anda mungkin memperhatikan bahwa ketika Anda mencoba mengirimkan formulir yang salah diisi, tooltips muncul. Dengan menyetel atribut "judul" ke bidang kami, kami dapat menambahkan petunjuk tambahan tentang nilai apa yang diharapkan oleh aturan validasi kami dari pengguna.

Harap dicatat bahwa browser yang berbeda menampilkan tooltips secara berbeda. DI DALAM peramban Chrome arti atribut judul akan muncul di bawah teks pesan kesalahan utama dan akan berukuran lebih kecil daripada teks kesalahan. peramban Firefox tidak akan menampilkan teks Anda untuk tooltip sama sekali kecuali Anda menggunakan atribut "pattern", yang akan digunakan untuk informasi pola.

Anda juga dapat menetapkan nilai spesifik yang diperlukan. Seperti email atau nomor.

Bidang ini wajib diisi dan informasi yang dimasukkan akan diperiksa kesesuaiannya dengan alamat e-mail. Mari tingkatkan UX:

  1. Beri tahu pengguna tentang format yang diperlukan saat fokus berada di kolom input
  2. Kami akan mengingatkannya jika data yang dimasukkan tidak valid

Tapi juga... jangan tampilkan tooltip apa pun jika kolomnya kosong. Dan jangan menganggapnya salah diisi. Hal ini dapat menimbulkan perasaan mengganggu dan hanya akan mengganggu. Untuk mematuhi rekomendasi ini, kita harus mencari tahu apakah kolom tersebut kosong atau tidak.

Memeriksa apakah field tersebut terisi atau tidak

Kami ingin melakukan trik dengan :sah Dan :tidak sah, namun kami tidak ingin mendahului kurva dan membuat kolom tersebut menjadi tidak valid sebelum diisi.

Apakah ada pemilih CSS untuk memeriksa apakah suatu bidang kosong? Sebenarnya tidak! Anda mungkin memikirkannya :kosong, tapi kamu salah. Kelas semu ini dirancang untuk memeriksa situasi ketika elemen tidak mengandung apa pun. Bidang masukan sudah kosong secara default.

Caranya adalah dengan memeriksa bidang untuk visibilitas atribut pengganti:

CSS
masukan:tidak(:ditampilkan di tempat penampung) ( )

Kita tidak menggunakan placeholder dalam contoh kita, namun aturan ini akan berfungsi jika kita menentukan nilai spasi tunggal:

:ditampilkan sebagai placeholder sangat berguna bagi kami! Ini secara umum rahasia Pemilih yang memungkinkan Anda memeriksa apakah suatu bidang memiliki nilai atau tidak.

IE dan Firefox belum mendukungnya, sehingga membuat segalanya menjadi lebih sulit. Biasanya penyelamatnya adalah fitur baru @mendukung, Tetapi…

CSS/* Ini tidak akan berhasil */
@supports (input: ditampilkan di placeholder) (
masukan:tidak(:ditampilkan di tempat penampung) (
}
}

Anda tidak dapat menggunakan @mendukung untuk penyeleksi, hanya properti/nilai (misalnya @supports (display: flex)).

Periksa placeholder kapan bantuan JavaScript cukup mudah:

JavaScript var i = dokumen.createElement('input');
if ('placeholder' di i) ( )

Tapi sepertinya itu bukan yang terbaik dengan cara yang sederhana imitasi :ditampilkan sebagai placeholder. Oleh karena itu...mungkin sebaiknya tunggu saja dukungan di semua browser.

Bayangkan dukungan sudah tersebar luas dan kita lihat seperti apa jadinya...

SCSS bentuk ( > div (

> masukan
> masukan
>masukan(

// Saat kolom masukan...
// 1. TIDAK kosong
// 2. TIDAK fokus
// 3. TIDAK valid &:invalid:not(:focus):not(:placeholder-shown) (
// Tampilkan latar belakang pengingat: merah muda;
& + label (
opacity: 0;
}
}

// Ketika bidang yang tidak valid mendapatkan fokus (dan masih belum kosong) &:invalid:focus:not(:placeholder-shown) (
// Tampilkan pengingat yang lebih persisten
& ~ .persyaratan (
tinggi maksimal: 200 piksel;
bantalan: 0 30px 20px 50px;
}
}
}

// ~
//


.persyaratan (
bantalan: 0 30 piksel 0 50 piksel;
warna: #999;
tinggi maksimal: 0;
transisi: 0,28 detik;
meluap: tersembunyi;
warna: merah;
gaya font: miring;

Laravel hadir dengan sederhana, sistem yang nyaman validasi (memeriksa data input untuk kepatuhan terhadap aturan) dan menerima pesan kesalahan - dengan kelas Validasi.

Contoh validasi paling sederhana

$validator = Validator::make(array("nama" => "Dale"), array("nama" => "wajib|min:5"));

Parameter pertama yang diteruskan ke metode make adalah data yang akan diuji. Parameter kedua adalah aturan yang harus diterapkan pada mereka.

Menggunakan Array untuk Menentukan Aturan

Beberapa aturan dapat dipisahkan dengan garis lurus (|) atau menjadi elemen terpisah susunan.

$validator = Validator::make(array("nama" => "Dale"), array("nama" => array("wajib", "min:5")));

Memvalidasi beberapa bidang

$validator = Validator::make(array("name" => "Dale", "password" => "badpassword", "email" => " [dilindungi email]"), array("nama" => "wajib", "kata sandi" => "wajib|min:8", "email" => "wajib|email|unik"));

Setelah instance Validator dibuat, metode gagal (atau lolos) dapat digunakan untuk melakukan validasi.

If ($validator->fails()) ( // Data yang dikirimkan gagal verifikasi)

Jika Validator menemukan kesalahan, Anda bisa mendapatkan pesannya seperti ini:

$pesan = $validator->pesan();

Anda juga bisa mendapatkan serangkaian aturan, data yang gagal verifikasi, tanpa pesan itu sendiri:

$gagal = $validator->gagal();

Memeriksa file

Kelas Validator berisi beberapa aturan awal untuk memvalidasi file, seperti size, mime dan lain-lain. Untuk melakukan pemeriksaan pada file, cukup transfer file beserta data lainnya.

Kaitkan setelah validasi

Setelah validasi selesai, Laravel dapat menjalankan fungsi penutupannya, di mana Anda dapat, misalnya, memeriksa sesuatu yang istimewa atau menambahkan semacam pesan kesalahan. Metode after() digunakan untuk ini:

$validator = Validator::membuat(...); $validator->after(function($validator) ( if ($this->somethingElseIsInvalid()) ( $validator->errors()->add("field", "Ada yang salah dengan field ini!"); ) )); jika ($validator->gagal()) ( // )

Anda dapat menambahkan beberapa setelahnya jika diperlukan.

Validasi di pengontrol

Menulis kode lengkap validasi setiap kali Anda perlu memvalidasi data tidak nyaman. Oleh karena itu, Laravel memberikan beberapa solusi untuk menyederhanakan prosedur ini.

Pengontrol dasar App\Http\Controllers\Controller menyertakan sifat ValidatesRequests, yang sudah berisi metode untuk validasi:

/** * Simpan postingan blog.

* * @param Permintaan $request * @return Response */ penyimpanan fungsi publik(Permintaan $request) ( $this->validate($request, [ "title" => "wajib|unik|maks:255", "body" => "wajib", ]); // ) Jika validasi berhasil, kode akan terus dieksekusi. Jika tidak, Illuminate\Contracts\Validation\ValidationException akan dilempar. Jika Anda tidak menangkap pengecualian ini, kerangka kerja akan menangkapnya, mengisi variabel Flash dengan pesan kesalahan validasi dan mengarahkan pengguna ke halaman sebelumnya

dengan bentuk - dirimu sendiri!

Dalam kasus permintaan AJAX, pengalihan tidak terjadi; kerangka kerja mengembalikan respons dengan kode HTTP 422 dan JSON dengan kesalahan validasi.

Kode di atas mirip dengan ini:

/** * Simpan postingan blog.

* * @param Permintaan $request * @return Response */ penyimpanan fungsi publik(Permintaan $request) ( $v = Validator::make($request->all(), [ "title" => "wajib|diperlukan|unik|maks :255", "body" => "wajib", ]); if ($v->fails()) ( return redirect()->back()->withErrors($v->errors()); ) // )

/** * (@inheritdoc) */ fungsi yang dilindungi formatValidationErrors(\Illuminate\Validation\Validator $validator) ( return $validator->errors()->all(); )

Validasi Kueri

Untuk menerapkan skenario validasi yang lebih kompleks, Anda mungkin merasa nyaman menggunakan apa yang disebut Permintaan Formulir. Ini adalah kelas permintaan HTTP khusus yang berisi logika validasi. Mereka memproses permintaan sebelum mencapai pengontrol.

Untuk membuat kelas permintaan, gunakan perintah make:request artisan:

Pembuat php: permintaan StoreBlogPostRequest

Kelas akan dibuat di folder app/Http/Requests. Tambahkan aturan validasi yang diperlukan ke metode aturannya:

/** * Dapatkan aturan validasi yang berlaku pada permintaan.

* * @return array */ aturan fungsi publik() ( return [ "title" => "wajib|unik|maks:255", "body" => "wajib", ]; )

Agar kerangka kerja dapat mencegat permintaan sebelum pengontrol, tambahkan kelas ini ke argumen metode pengontrol yang diperlukan:

Dengan penggunaan validasi kueri yang tepat, Anda dapat yakin bahwa pengontrol Anda selalu hanya berisi data masukan yang divalidasi!

Jika validasi gagal, kerangka kerja mengisi variabel flash dengan kesalahan validasi dan mengembalikan pengalihan ke halaman sebelumnya. Dalam kasus permintaan AJAX, respons dengan kode 422 dan JSON dengan kesalahan validasi dikembalikan.

Kontrol Akses

Kelas Permintaan Formulir juga berisi metode otorisasi. Dalam metode ini, Anda dapat memeriksa apakah pengguna diizinkan melakukan tindakan ini, memperbarui sumber daya tertentu. Misalnya, jika pengguna mencoba mengedit komentar pada postingan, apakah mereka penulisnya?

/** * Tentukan apakah pengguna berwenang untuk membuat permintaan ini. * * @return bool */ fungsi publik authorize() ( $commentId = $this->route("comment"); return Comment::where("id", $commentId) ->where("user_id", Auth: :id())->ada(); Perhatikan pemanggilan metode rute() di atas. Metode ini memberi Anda akses ke parameter di URL (dalam

dalam hal ini

ini (komentar)), didefinisikan dalam rute:

Rute::post("komentar/(komentar)");

Jika metode otorisasi mengembalikan false, kerangka kerja menghasilkan respons dengan kode HTTP 403 dan segera mengirimkannya. Metode pengontrol tidak dijalankan.

Jika Anda ingin menyesuaikan pesan kesalahan validasi yang disimpan dalam variabel flash sesi selama pengalihan, ganti metode formatValidationErrors di kelas permintaan dasar (App\Http\Requests\Request):

/** * (@inheritdoc) */ fungsi yang dilindungi formatValidationErrors(\Illuminate\Validation\Validator $validator) ( return $validator->errors()->all(); )

Bekerja dengan Pesan Kesalahan

Setelah memanggil metode messages dari objek Validator, Anda akan menerima objek MessageBag yang memiliki satu set metode yang berguna untuk mengakses pesan kesalahan.

Menerima pesan pertama untuk suatu bidang

echo $pesan->pertama("email");

Mengambil semua pesan untuk satu bidang

foreach ($pesan->dapatkan("email") sebagai $pesan) ( // )

Mengambil semua pesan untuk semua bidang

foreach ($pesan->semua() sebagai $pesan) ( // )

Memeriksa pesan untuk suatu bidang

if ($pesan->memiliki("email")) ( // )

Menerima kesalahan dalam format tertentu

echo $pesan->pertama("email", "");

Catatan: Secara default, pesan diformat dengan cara yang sesuai untuk Twitter Bootstrap.

Terima semua pesan dalam format tertentu

foreach ($pesan->semua("
  • :pesan
  • ") sebagai $pesan) ( // )

    Bug dan pola

    Setelah Anda menyelesaikan validasi, Anda memerlukan cara sederhana untuk meneruskan kesalahan ke template. Laravel membuat ini mudah dilakukan. Misalnya, kami memiliki rute berikut:

    Rute::dapatkan("daftar", fungsi() ( return View::make("user.register"); )); Route::post("register", function() ( $rules = array(...); $validator = Validator::make(Input::all(), $rules); if ($validator->fails( )) ( return redirect("daftar")->withErrors($validator); ) ));

    Perhatikan bahwa ketika pemeriksaan gagal, kita meneruskan objek Validator ke objek Redirect menggunakan metode withErrors. Metode ini akan menyimpan pesan kesalahan dalam variabel flash sesi satu kali, sehingga membuatnya tersedia untuk permintaan berikutnya.

    Namun, perhatikan bahwa kami tidak meneruskan View::make("user.register"); variabel $errors ke templat. Laravel sendiri memeriksa data sesi untuk mengetahui keberadaan variabel dan secara otomatis meneruskannya ke template jika tersedia. Oleh karena itu, penting untuk diingat bahwa variabel $errors akan tersedia untuk semua template Anda setiap saat, berdasarkan permintaan apa pun. . Hal ini memungkinkan Anda berasumsi bahwa variabel $errors selalu ditentukan dan dapat digunakan dengan aman. Variabel $errors adalah turunan dari kelas MessageBag.

    Jadi, setelah pengalihan, Anda dapat menggunakan variabel $errors yang diatur secara otomatis di template:

    pertama("email"); ?>

    Bernama Tas Pesan

    Jika Anda memiliki beberapa formulir di halaman, maka Anda dapat memilih nama objek MessageBag di mana teks kesalahan akan dikembalikan sehingga Anda dapat menampilkannya dengan benar untuk formulir yang diinginkan.

    Return redirect("daftar")->withErrors($validator, "login");

    Dapatkan teks kesalahan dari MessageBag dengan nama login:

    login->pertama("email"); ?>

    Aturan Validasi

    Di bawah ini adalah daftar semua aturan yang tersedia dan fungsinya:

    diterima

    Bidang tersebut harus bernilai Ya, pada atau 1 . Hal ini berguna untuk memeriksa penerimaan peraturan dan izin.

    url_aktif

    Bidang tersebut harus berupa URL yang valid, dapat diakses melalui fungsi checkdnsrr.

    setelah: tanggal

    Kolom harus diberi tanggal paling lambat tanggal

    alfa

    Bidang hanya boleh berisi karakter alfabet.

    alpha_dash

    Bidang hanya boleh berisi karakter alfabet, angka, garis bawah (_), dan tanda hubung (-).

    angka_alfa

    Bidang hanya boleh berisi karakter alfabet dan angka.

    susunan

    Bidangnya harus berupa array.

    sebelum: tanggal

    Bidang tersebut harus berisi tanggal yang lebih awal dari tanggal. String dikonversi menjadi tanggal menggunakan fungsi strtotime.

    di antara: menit,maks

    Bidang harus memiliki ukuran mulai dari menit ke maks. String, angka, dan file diperlakukan serupa dengan aturan ukuran.

    boolean

    Bidangnya harus Boolean. Nilai yang diperbolehkan adalah true , false , 1 , 0 , "1" dan "0" .

    dikonfirmasi

    Nilai bidang harus sesuai dengan nilai bidang dengan nama tersebut, ditambah foo_confirmation . Misalnya, jika kolom kata sandi dicentang, maka kolom konfirmasi_kata sandi yang cocok dengan nilainya harus diteruskan ke input.

    tanggal

    Lapangannya harus tanggal yang benar sesuai dengan fungsi strtotime.

    format_tanggal: format

    Bidang harus sesuai dengan format tanggal format sesuai dengan fungsi date_parse_from_format.

    berbeda: bidang

    Nilai field yang diperiksa harus berbeda dengan nilai field bidang.

    e-mail

    Bidang tersebut harus berupa alamat email yang valid.

    ada: meja,kolom

    Bidang tersebut harus ada di meja yang diberikan basis data.

    Mudah digunakan:

    "negara bagian" => "ada:negara bagian"

    Menentukan nama field dalam tabel:

    "state" => "ada:states,singkatan"

    Anda juga dapat menentukan kondisi lainnya untuk ditambahkan ke kueri "WHERE":

    "email" => "ada:staf,email,account_id,1"

    gambar

    File yang diupload harus berupa gambar format jpeg, png, bmp, gif atau svg.

    di dalam: foo,batang,...

    Nilai bidang harus berupa salah satu dari berikut ini ( foo, batang dll.).

    bilangan bulat

    Bidang harus memiliki nilai bilangan bulat yang valid.

    aku p

    Bidang tersebut harus berupa alamat IP yang valid.

    maks: nilai

    Nilai bidang harus kurang dari atau sama dengan nilai

    pantomim: foo,batang,...

    Jenis MIME dari file yang diunggah harus salah satu yang terdaftar.

    Mudah digunakan:

    "foto" => "pantomim:jpeg,bmp,png"

    menit: nilai

    Nilai bidang harus lebih dari nilai. String, angka, dan file diperlakukan serupa dengan aturan tersebut.

    tidak masuk: foo,batang,...

    Nilai bidang Bukan harus salah satu dari berikut ini ( foo, batang dll.).

    numerik

    Bidang harus memiliki nilai numerik atau pecahan yang valid.

    ekspresi reguler: pola

    Bidang harus cocok dengan ekspresi reguler yang diberikan.

    Perhatian: Saat menggunakan aturan ini, Anda mungkin perlu mencantumkan aturan lain sebagai elemen array, terutama jika ekspresi berisi karakter pipa (|).

    diperlukan

    Bidang yang diuji harus ada dan memiliki nilai yang tidak kosong.

    diperlukan_jika: bidang,nilai,...

    Bidang yang diuji harus ada dan mempunyai nilai yang tidak kosong jika bidang lainnya bidang hadir dan memiliki arti apa pun nilai.

    diperlukan_dengan: foo,batang,...

    Setidaknya salah satu bidang yang tercantum ada dan memiliki nilai yang tidak kosong ( foo, batang dll.).

    diperlukan_dengan_semua: foo,batang,...

    Bidang yang diuji harus ada dan mempunyai nilai yang tidak kosong, tetapi hanya jika semua bidang yang terdaftar ada dan mempunyai nilai yang tidak kosong ( foo, batang dll.).

    diperlukan_tanpa: foo,batang,...

    Bidang yang diuji harus ada dan mempunyai nilai yang tidak kosong, tetapi hanya jika Bukan setidaknya salah satu bidang yang tercantum ada atau memiliki nilai kosong ( foo, batang dll.).

    wajib_tanpa_semua: foo,batang,...

    Bidang yang diuji harus ada dan mempunyai nilai yang tidak kosong, tetapi hanya jika Bukan hadir atau punya nilai kosong semua bidang yang terdaftar ( foo, batang dll.).

    sama: bidang

    Bidang tersebut harus memiliki nilai yang sama dengan bidang tersebut bidang.

    ukuran: nilai

    Bidangnya harus cocok nilai ukuran. Untuk string itu menunjukkan panjangnya, untuk angka- nomor, untuk file- ukuran dalam kilobyte.

    zona waktu

    Bidang tersebut harus berisi pengidentifikasi zona waktu, salah satu yang tercantum dalam fungsi php timezone_identifiers_list

    unik: meja,kolom,kecuali,kolom id

    Nilai bidang harus unik dalam tabel database yang diberikan. Jika kolom tidak ditentukan, nama field akan digunakan.

    Mudah digunakan

    "email" => "unik:pengguna"

    Menentukan nama field dalam tabel

    "email" => "unik:pengguna,alamat_email"

    Abaikan ID tertentu

    "email" => "unik:pengguna,alamat_email,10"

    Menambahkan Ketentuan Tambahan

    Anda juga dapat menentukan kondisi lainnya untuk ditambahkan ke kueri "WHERE":

    "email" => "unik:pengguna,alamat_email,NULL,id,id_akun,1"

    Pada aturan di atas, hanya baris dengan account_id sama dengan 1 yang akan dimasukkan dalam cek.

    url

    Bidang tersebut harus berupa URL yang valid.

    Catatan: Fungsi PHP filter_var digunakan

    Aturan bersyarat

    Terkadang Anda perlu memvalidasi bidang tertentu hanya ketika itu ada dalam data input. Untuk melakukan ini, tambahkan aturan kadang-kadang:

    $v = Validator::make($data, array("email" => "terkadang|diperlukan|email",));

    Pada contoh di atas, kolom email hanya akan memicu validasi ketika $data["email"] ada.

    Aturan bersyarat yang kompleks

    Terkadang Anda hanya ingin sebuah bidang memiliki nilai jika bidang lain memiliki nilai, katakanlah, lebih besar dari 100. Atau Anda mungkin hanya memerlukan dua bidang untuk memiliki nilai ketika bidang ketiga juga ditentukan. Hal ini mudah dicapai dengan aturan bersyarat. Pertama buat objek Validator dengan seperangkat aturan statis yang tidak pernah berubah:

    $v = Validator::make($data, array("email" => "wajib|email", "permainan" => "wajib|numerik",));

    Sekarang katakanlah aplikasi Anda ditulis untuk kolektor game. Jika seorang kolektor yang memiliki lebih dari 100 game mendaftar, kami ingin bertanya kepada mereka mengapa mereka membutuhkan game sebanyak itu. Misalnya, mereka mungkin memiliki toko atau mungkin hanya ingin mengoleksinya. Jadi, untuk menambahkan aturan kondisional seperti itu, kami menggunakan metode Validator.

    $v->kadang-kadang("alasan", "diperlukan|maks:500", function($input) ( return $input->games >= 100; ));

    Parameter pertama dari metode ini adalah nama field yang kita periksa. Parameter kedua adalah aturan yang ingin kita tambahkan jika fungsi penutupan yang diteruskan (parameter ketiga) mengembalikan true . Metode ini memungkinkan Anda dengan mudah membuat aturan validasi masukan yang kompleks. Anda bahkan dapat menambahkan aturan bersyarat yang sama ke beberapa bidang secara bersamaan:

    $v->kadang-kadang(array("alasan", "biaya"), "wajib", function($input) ( return $input->games >= 100; ));

    Catatan: Parameter $input yang diteruskan ke penutupan adalah objek Illuminate\Support\Fluent dan dapat digunakan untuk membaca input dan file yang sedang diperiksa.

    Pesan kesalahan sendiri

    Anda dapat meneruskan pesan kesalahan Anda sendiri, bukan pesan default. Ada beberapa cara untuk melakukan ini.

    Mengirimkan pesan Anda ke Validator

    $messages = array("wajib" => "Kolom:atribut harus diisi.",); $validator = Validator::make($input, $rules, $messages);

    Catatan: string:attribute akan diganti dengan nama field yang diperiksa. Anda juga dapat menggunakan string variabel lain.

    Menggunakan Variabel String Lainnya

    $messages = array("same" => "Nilai:attribute dan:other harus cocok.", "size" => "Field:attribute harus sama persis:size.", "between" => " Nilai:attribute harus dari:min hingga:max.", "in" => "Kolom:attribute harus memiliki salah satu nilai berikut: :values",);

    Menentukan pesan Anda sendiri untuk bidang tertentu

    Terkadang Anda mungkin perlu menentukan pesan Anda untuk bidang terpisah.

    $messages = array("email.required" => "Kami perlu mengetahui alamat email Anda!",);

    Menentukan pesan Anda sendiri di file pelokalan

    Dimungkinkan juga untuk menentukan pesan validasi dalam file pelokalan alih-alih meneruskannya ke Validator secara langsung. Untuk melakukan ini, tambahkan pesan ke array khusus file pelokalan app/lang/xx/validation.php.

    "custom" => array("email" => array("wajib" => "Kami perlu mengetahui alamat email Anda!",),),

    Aturan verifikasi sendiri

    Mendaftarkan aturan validasi Anda sendiri

    Laravel secara asli berisi banyak aturan yang berguna, namun Anda mungkin perlu membuatnya sendiri. Salah satu cara untuk mendaftarkan aturan kustom adalah melalui metode Validator::extend.

    Validator::extend("foo", function($attribute, $value, $parameters) ( return $value == "foo"; }); !}

    Catatan: Nama aturan harus dalam format_with_underscores.

    Fungsi penutupan yang diteruskan menerima tiga parameter: nama bidang yang sedang diperiksa $attribute , nilai bidang $value dan array parameter $parameters yang diteruskan ke aturan.

    Alih-alih fungsi, Anda bisa meneruskan referensi ke metode kelas ke metode perluasan:

    Validator::extend("foo", "FooValidator@validate");

    Perhatikan bahwa Anda juga perlu menentukan pesan kesalahan untuk aturan baru. Anda dapat melakukan ini dengan meneruskannya sebagai array string ke Validator, atau dengan menulisnya ke dalam file pelokalan.

    Memperluas kelas Validator

    Daripada menggunakan fungsi penutupan untuk memperluas kumpulan aturan yang tersedia, Anda dapat memperluas kelas Validator itu sendiri. Untuk melakukannya, buat kelas yang mewarisi Illuminate\Validation\Validator . Anda dapat menambahkan metode validasi baru dengan mengawali namanya dengan validasi .

    Mendaftarkan kelas Validator baru

    Maka Anda perlu mendaftarkan ekstensi validasi ini. Hal ini dapat dilakukan, misalnya, di penyedia layanan Anda atau di file awal Anda.

    Validator::resolver(function($translator, $data, $rules, $messages) ( return new CustomValidator($translator, $data, $rules, $messages); ));

    Terkadang, saat membuat kelas validasi Anda sendiri, Anda mungkin perlu mendefinisikan variabel string Anda sendiri (seperti ":foo") untuk menggantikan pesan kesalahan. Hal ini dilakukan dengan membuat kelas seperti dijelaskan di atas dan menambahkan fungsi dengan nama seperti replaceXXX .

    Fungsi yang dilindungi replaceFoo($message, $attribute, $rule, $parameters) ( return str_replace(":foo", $parameters, $message); )

    Jika Anda ingin menambahkan pesan Anda tanpa menggunakan Validator::extend , Anda dapat menggunakan metode Validator::replacer:

    Validator::replacer("aturan", function($pesan, $atribut, $aturan, $parameter) ( // ));

    • Sergei Savenkov

      semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat