Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Membangun aplikasi Web dari awal dengan Laravel: Filter, validasi dan file

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Ari Gustiawan (you can also view the original English article)

Dalam Nettuts + Mini Seri ini, kita akan membangun aplikasi web dari awal, sambil menyelam ke PHP framework baru besar yang cepat mengambil Uap, disebut Laravel.

Pada pelajaran ini kita akan belajar tentang beberapa fitur Laravel sangat berguna: filter, dan validasi dan file Perpustakaan.


Tinjauan

Selamat datang kembali ke aplikasi Web kami dari awal dengan seri Laravel! Dalam seri kedua tutorial dari Mini Seri kami, kami belajar banyak tentang Laravel's ORM implementasi:

  • Beberapa latar belakang pada "Model"
  • Apakah itu Eloquent ORM
  • Cara men-setup konfigurasi database Laravel's
  • Cara membuat Laravel Model yang pertama Anda
  • Fungsi dasar dari perpustakaan Auth dan Input
  • Membuat penggunaan ORM Eloquent dalam view

Jika Anda belum melihat itu belum, saya mendorong Anda untuk memeriksa bagian pertama dan kedua dari Mini Seri — itu akan membuatnya secara signifikan lebih mudah untuk mengikuti bersama, seperti yang kita membangun aplikasi tes, Instapics, melalui setiap bagian.

Jadi mari kita mulai!


1 - Laravel Filter

Singkatnya, filter adalah fungsi yang dapat kita jalankan pada rute before atau after siklus permintaan. Hal ini terutama berguna untuk hal-hal seperti otentikasi dan logging. Untuk mendaftarkan filter, kita perlu menambahkan sesuatu seperti berikut ke application/routes.php file:

Setelah kami mendaftarkan filter, kita perlu pasangkan ke route, seperti:

Dalam contoh di atas, myfilter akan memicu pada semua permintaan untuk halaman indeks (yaitu /). Mari kita mengatakan kami ingin menerapkan filter otentikasi untuk rute dashboard:

Kode di atas akan mengarahkan semua permintaan tidak terauthentikasi ke dashboard rute ke jalur home.

Global filter

Secara default, Laravel termasuk dua filter, before dan after, yang menjalankan sebelum dan setelah setiap permintaan pada aplikasi. Ini adalah di mana Anda menempatkan hal-hal, seperti permintaan logging, menambahkan aset global atau fire event global. Sebagai contoh:

Ini menulis pesan log jenis request untuk aplikasi log dan daftar ada masukan dari permintaan.

Route Grup

Jika Anda menemukan diri Anda menerapkan filter sama beberapa rute, Anda dapat menggunakan Route Group untuk kelompok mereka semua bersama-sama dan mengurangi pengulangan kode:

Filter controller

Untuk aplikasi (seperti Instapics kami sendiri) yang menggunakan Controllers, kita dapat menerapkan penyaring menggunakan fungsi $this->filter() di konstruktor controller:

Filter ini, seperti rute, juga dapat disesuaikan berlaku hanya untuk tertentu HTTP kata dan tindakan-tindakan spesifik controller:


2 - Laravel Validation

Laravel's built-in validasi membuatnya mudah untuk diterapkan validasi apapun array nilai, lebih khusus lagi, form input. Untuk melakukannya, Anda hanya perlu untuk membangun dua array:

  • $input - ini adalah array asosiatif nilai-nilai yang Anda ingin memvalidasi.
  • $rules - ini adalah array asosiatif (dengan tombol yang sama sebagai $input array) bahwa daftar turun aturan validasi.

Validation Rules

Dibawah ini adalah daftar aturan validasi yang dapat digunakan dengan perpustakaan validasi Laravel. Seperti dalam contoh di atas, Anda bebas untuk mencampur dan mencocokkan ini dengan memisahkan mereka dengan pipa ("|"):

  • required - nilai harus hadir dalam array masukan

  • alpha - nilai harus hanya terdiri dari karakter abjad

  • alpha_num - nilai harus hanya terdiri dari huruf

  • alpha_dash - nilai harus hanya terdiri dari alfanumerik, berlari dan/atau menggarisbawahi

  • size - nilai hanya boleh panjang tertentu, atau harus sama jika numerik

  • between - nilai adalah daripada antara suatu kisaran spesifik

  • min - nilai setidaknya diberikan

  • max - nilai sama dengan atau kurang daripada diberikan

  • numeric - nilai numerik

  • integer - nilai integer

  • in - nilai yang terkandung dalam diberikan

  • not_in - nilai ini tidak di diberikan

  • confirmed - akan memeriksa jika key_confirmation ada dan setara dengan nilai

    Ini akan memeriksa apakah nilai password_confirmation ada dan sama dengan password

  • accepted - ini akan memeriksa jika nilai diatur ke 'ya' atau 1. Berguna untuk kotak centang

  • same - nilai adalah sama dengan nilai atribut tertentu

  • different - nilai harus berbeda dari nilai atribut tertentu

  • match - nilai harus cocok dengan ekspresi reguler yang diberikan

  • unique - cek untuk keunikan nilai dalam tabel yang diberikan.

    Kolom tertentu juga diterima jika nama kolom tidak sama seperti nama atribut.

    Ada saat-saat ketika kita ingin memeriksa keunikan, tetapi mengabaikan record tertentu (biasanya record yang terkait dengan pengguna saat ini). Kita dapat melakukan ini dengan menambahkan ketiga diberikan, yang seharusnya menjadi ID dari record dalam tabel.

  • exists - nilai harus ada dalam sebuah tabel

    Ini juga menerima kedua diberikan jika kita ingin mengubah nama kolom untuk memeriksa.

  • before - nilai harus tanggal sebelum tanggal tertentu

  • after - nilai harus tanggal setelah tanggal tertentu

  • email - nilai harus dalam format email yang valid

  • url - nilai adalah format url yang valid

  • active_url - nilai dalam format url berlaku dan aktif

  • mimes - cek untuk jenis mime dari sebuah file upload. Anda dapat menggunakan nilai tipe-mime dari config/mimes.php file

  • image - file harus gambar

    Anda juga dapat menggunakan validator max di sini untuk memeriksa ukuran file dalam kilobyte


Error Handling

Sekali Anda memanggil Validator->fails() atau Validator->passes() metode, Perpustakaan mengumpulkan semua kesalahan dalam kelas yang dapat diakses melalui Validator->errors. Anda kemudian akan mampu mengambil kesalahan ini dengan beberapa fungsi di kelas errors. Laravel menyediakan beberapa fungsi yang keren untuk mengotomatisasi kesalahan penanganan yang sesuai pada kebanyakan skenario POST/REDIRECT/GET:

Di sini, kami menggunakan metode with_errors untuk Perpustakaan Redirect. Ini secara otomatis mengikat $errors variabel dalam tampilan untuk dimanapun kita berada mengarahkan - dalam hal ini, halaman register/index:

Pada berkas Lihat, kita menggunakan metode $errors->has() untuk memeriksa jika ada kesalahan untuk bidang tertentu. Jika tidak, kami kemudian menggunakan metode $errors->get() untuk menampilkan pesan kesalahan. Parameter kedua dalam metode ini dapat digunakan untuk memberikan template pada bagaimana kita menampilkan pesan kesalahan.

Custom Error Message

Karena kebanyakan orang ingin mengubah pesan kesalahan untuk Laravel untuk menyesuaikan aplikasi mereka merek atau bahasa, validasi library juga memungkinkan untuk menyesuaikan pesan error yang dihasilkan oleh hanya menambahkan dalam sebuah array $messages untuk Validasi::make fungsi panggilan:

Ada dua cara untuk membuat sebuah array $messages:

  • Rule-bases - Anda dapat memberikan pesan kustom untuk semua bidang yang disahkan oleh aturan tertentu. Sebagai contoh:

    Ini akan mengubah default pesan kesalahan untuk semua bidang yang required, same, size, between dan in aturan. Di sini, kita juga melihat bahwa Laravel menggunakan pengganti untuk mengganti nilai-nilai tertentu dalam pesan error. :atribute akan berubah menjadi atribut bidang (sans garis bawah) itu adalah untuk. :other digunakan untuk aturan yang same, yang mengacu pada atribut lainnya yang harus sesuai. :size mengacu pada ukuran didefinisikan dalam parameter aturan. :min dan :max adalah nilai-nilai minimum dan maksimum, dan :values adalah daftar nilai-nilai yang kita tentukan nilai dari field tersebut.

  • Attribute-based - di sisi lain, Anda dapat juga memberikan pesan kustom untuk atribut tertentu pada aturan khusus. Mengambil contoh dari atas:

    email_required pesan error yang digunakan ketika atribut email gagal aturan required, email_email adalah pesan error yang digunakan ketika email gagal email aturan, dan sebagainya.

Jika Anda menemukan diri Anda consantly menciptakan pesan kustom yang sama meskipun, akan lebih mudah untuk hanya menentukan pesan kesalahan kustom secara global. Anda dapat melakukannya dengan mengedit application/langauge/en/validation.php file, dan mengedit array custom ditemukan di sana:


3 - Laravel File

Penanganan File upload

Perpustakaan Files Laravel yang membuatnya mudah untuk menangani upload file dengan menggunakan metode Input::upload, yang merupakan pembungkus sederhana untuk PHP move_uploaded_file fungsi:

Untuk memvalidasi file upload, Anda dapat menggunakan perpustakaan Validator yang kita bahas di atas seperti:

Manipulasi file

Perpustakaan Files juga memiliki beberapa metode manipulasi file, seperti:

File yang berhubungan dengan fungsi

Laravel juga menyediakan beberapa tujuan umum file yang berhubungan dengan fungsi yang dapat digunakan di seluruh kode. Sebagai contoh, metode File::extension mengembalikan extensi string nama file:

Fungsi File::is memeriksa apakah file dari jenis tertentu. Perhatikan bahwa ini tidak hanya check ekstensi file, tetapi menggunakan Fileinfo PHP extension untuk membaca isi sebenarnya dari file. Hal ini berguna untuk menentukan file yang benar-benar jenis file benar:

Daftar ekstensi kompatibel dapat dilihat di application/config/mimes.php.

Berbicara tentang jenis mime, Anda juga dapat menggunakan fungsi File::mime untuk mendapatkan jenis mime extensi. Jenis mime kembali didasarkan pada file mimes.php yang sama:

File::cpdir dan metode File::rmdir dapat menyalin dan menghapus direktori, masing-masing.

Sekarang bahwa kita telah Pelajari semua tentang Filter, Validation Perpustakaan dan Perpustakaan Files, mari kita menerapkan mereka dalam aplikasi kita, Instapics.


Langkah 1 membuat auth Filter

Instapics

Menambahkan filter ke Base_Controller

Mari kita memulai dengan memastikan user hanya dapat melihat halaman otentikasi dengan menciptakan sebuah filter auth yang berjalan sebelum semua permintaan. Karena kita menggunakan controller berbasis routing, kita harus mengkonfigurasi filter kami di controller kami. Mari kita menempatkan filter dalam metode __construct Base_Controller untuk memastikan auth filter berjalan pada semua kontroler yang extend itu. Sementara kita di itu, mari kita tambahkan filter nonauth serta untuk memastikan orang-orang dapat hanya mengunjungi halaman tertentu ketika mereka sedang tidak dikonfirmasi:

Di sini kita mendefinisikan bahwa setiap permintaan untuk rute home akan memerlukan bebas dikonfirmasi pengguna, yang baik karena ini adalah di mana layar login kebohongan. request lain meskipun akan default untuk mengharuskan authenticated user. Untuk User_Controller, kami benar-benar memiliki dua metode yang terpisah yang memerlukan baik non-authenticated user (mengotentikasi) dan pengguna yang diotentikasi (logout), sehingga kita membuat penggunaan only metode untuk menentukan tindakan controller filter berlaku untuk.

Buat filter definisi di routes.php

Sekarang, buka application/routes.php, yang mana kita akan mendefinisikan auth dan nonauth filter. Perhatikan bahwa Anda mungkin sudah ada definisi filter auth jadi hanya menggantinya dengan yang ada di bawah ini:

Di dalam filter auth, kami memeriksa jika pengguna diotentikasi dengan perpustakaan Auth. Jika pengguna tidak dikonfirmasi, kami mengarahkan mereka kembali ke route home yang mana screen login berada, jika tidak, mereka diizinkan untuk melanjutkan. Hal yang sama dengan nonauth filter - check jika pengguna diotentikasi, jika dia, kemudian mengarahkan dirinya ke dashboard.


Langkah 2 menerapkan User upload

Membuat form upload foto

Sekarang bahwa kita tahu sedikit lebih tentang bagaimana untuk menangani upload file dalam Laravel, mari kita mulai menerapkan salah satu fitur utama Instapics' — meng-upload foto. Mulailah dengan menciptakan sebuah folder bernama folder application/views/plugins, dan dalam hal ini membuat sebuah blade view file bernama upload_modal.blade.php. Menyisipkan HTML berikut:

Membuat button trigger

Mari kita memicu bentuk modal dengan tombol - Tambahkan ini ke application/views/layouts/main.blade.php, setelah .nav-collapse div:

Di sini, kami menyertakan file tampilan yang disebut loggedin_postnav jika pengguna masuk. Ini adalah tempat kami akan menambahkan tombol untuk form modal upload. Pada file yang sama, tambahkan ini setelah .container div:

Ini adalah dimana kami meliputi upload_modal HTML. Kami memastikan bahwa meskipun bahwa pengguna tidak login sebelumnya termasuk file HTML ini, sejak seperti tombol pelatuk, ini tidak akan benar-benar diperlukan jika pengguna tidak dikonfirmasi.

Sekarang, membuat application/views/plugins/loggedin_postnav.blade.php

Refresh halaman dan Anda akan melihat tombol upload baru - klik untuk melihat bahwa ia bekerja!

Upload Instapic

Menghubungkan bentuk ke controller sesuai

Sekarang bahwa kita memiliki barang-barang kami front-end bekerja, mari kita mulai bekerja di bagian back-end form. Membuat application/controllers/photo.php, dan dimasukkan ke dalam kode berikut untuk controller:

Mencobanya - Anda dapat mulai meng-upload baru Instapics.

Tambahkan validasi ke formulir upload

Mari kita tambahkan beberapa aturan validasi ini untuk memastikan bahwa pengguna hanya mengajukan hal-hal yang benar. Memperbarui controller dengan berikut:

Lihat bagaimana kami validasi input? Kami memastikan bahwa foto hadir, gambar dan kurang dari 500kb. Kami juga memastikan bahwa Deskripsi ada setelah sanitasi. Kami tidak akan dapat melihat pesan kesalahan kita namun meskipun, jadi mari kita memperbaikinya dengan menambahkan beberapa HTML untuk membuat pesan kesalahan kita. Buka application/views/layouts/main.blade.php dan tambahkan baris berikut di .container div:

Sekarang, membuat application/views/plugins/status.blade.php. Ini adalah tempat kami akan memberikan pesan kesalahan yang sebenarnya. Kami juga menambahkan dukungan untuk pesan status berbasis sesi (seperti yang kita gunakan dalam $upload_success memeriksa kode controller Photos):

Cobalah menyebabkan kesalahan pada form upload sekarang dengan mengirimkan tanpa file yang dipilih atau tanpa keterangan (karena keduanya diperlukan). Anda akan melihat pesan error yang diberikan di atas:

Instapic Errors

Langkah 3 menambahkan validasi Login Form dan pendaftaran

Sekarang bahwa kita tahu bagaimana menggunakan Laravel's Validation library, mari kita meninjau form pertama - bentuk login dan registrasi. Saat ini, kita hanya menggunakan echo untuk melihat bahwa login atau registrasi gagal-Mari kita ganti yang dengan validasi yang tepat. Buka application/controllers/user.php dan update seperti:

Karena kami membuat kami rendering pesan status dalam gaya modular, kita bahkan tidak perlu untuk menulis HTML setiap tambahan untuk melihat pesan kesalahan dalam tindakan! Silahkan coba!

Instapic Errors

Kesimpulan

Dalam tutorial ketiga dalam seri Laravel kami, kita belajar:

  • Bagaimana, Kapan dan di mana untuk menggunakan Laravel Filter
  • Bagaimana menggunakan Laravel's Validation library, dan bagaimana untuk menangani kesalahan Validation library.
  • Bagaimana mengelola file dalam Laravel yang menggunakan perpustakaan Files

Laravel datang dengan banyak fungsi kecil dan Perpustakaan, yang meskipun diimplementasikan dengan cara lain, dibuat lebih mudah dan sederhana (misalnya file upload dalam satu baris!) dengan mengadopsi Laravel's ekspresif. It's Perpustakaan sedikit menghemat waktu tersebut menambahkan hingga dan dari waktu ke waktu, menghemat satu ton terbuang produktivitas menulis ulang kode.

Berikutnya di aplikasi Web kami dari awal dengan Laravel seri, kita akan mempelajari lebih lanjut tentang acara, migrasi dan penggunaan beberapa maju ORM Eloquent!

Apa yang Anda pikirkan Perpustakaan Laravel yang dibahas dalam tutorial? Apakah itu sesuatu yang Anda anggap berguna? Beritahu saya di komentar! Dan, jika Anda anggota Tuts + Premium, menantikan untuk kursus Laravel Essentials mendatang kami!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.