Sprint Satu, Setup Dulu
Pada sprint pertama ini, kami mostly baru menyiapkan project yang akan dikerjakan. Saya juga baru menginstall ubuntu untuk mengerjakan project ini, sekarang laptop saya bisa dual boot. Selain itu untuk menginstall laravel, composer, dan PHP cukup susah. Pasalnya saya masih harus beradaptasi dengan OS Linux dan framework yang baru. Sebelumnya framework yang sering saya gunakan adalah Django. Namun ternyata Django dan Laravel tidak terlalu banyak berbeda. Mereka sama-sama menggunakan MVC dalam strukturisasi project.
Django memiliki jumlah folder yang lebih sedikit dibandingkan Laravel. Hal ini juga yang pertama kali membuat saya cukup bingung. Perhatikan gambar dibawah ini
Cukup banyak ya? Mari kita bahas beberapa folder yang cukup penting.
app/Http
Direktori ini merupakan direktori yang digunakan untuk menyimpan seluruh file-file yang berkaitan dengan proses request dan response Http. Dikretori ini memiliki tiga buah sub direktori :
app/Http/Controllers
: Direktori ini digunakan untuk menyimpan seluruh class Controller yang kita buat. Misalnya ProductController.php, SalesController.php, dll.app/Http/Middleware
: Direktori ini digunakan untuk menyimpan seluruh class yang berhubungan dengna middleware PHP. Secara umum middleware adalah sebuah class yang akan dieksekusi sebelum HTTP request yang masuk diberikan kepada Controller. Tujuan dari class Middleware adalah untuk melakukan filter seperti misalnya menolak akses dari user yang belum login.app/Http/Requests
: Direktori ini hanya berisikan sebuah class yaitu Request.php yang dapat digunakan untuk mendapatkan data dari form request yang dikirim oleh web browser. Selain itu direktori ini juga ditujukan untuk menyimpan class validator yang kita buat baik yang dibuat secara manual ataupun dengan menggunakan perintahphp artisan make:request
.
database/migrations
Direktori ini berisikan file-file migrations yang digenerate oleh laravel pada saat kita menjalankan perintah php artisan make:migration
. fitur migration sendiri sangat berguna untuk melakukan perubahan pada database baik itu penambahan tabel, penambahan kolom, menghapus kolom, menghapus tabel serta melakukan roll-back setiap perubahan database yang kita buat. Fitur migration ini akan sangat terasa manfaatnya terutama pada saat kita mengerjakan sebuah project di dalam sebuah tim dan banyak struktur database yang berubah seiring perkembangan project.
database/seeds
Direktori ini berisikan file-file dabase seeds yang digenerate oleh laravel pada saat kita menjalankan perintah php artisan make:seeder
. fitur seeding di laravel sendiri sangat berguna apabila kita ingin melakukan inisialisasi data (data awalan) pada table yang kita buat.
public
Pada dasarnya laravel memisahkan antara direktori public dan private. direktori public adalah direktori dimana seluruh resource aplikasi dapat diakses melalui web browser seperti misalnya gambar, javascript dan css. Sedangkan direktori private sendiri berisikan seluruh kode PHP yang telah kita buat ataupun yang merupakan bawaan dari framwork laravel itu sendiri. Umumnya, dalam melakukan proses deployment laravel yang secure, hanya direktori public
ini sajalah yang diletakkan di dalam direktori public_html
pada web server sedangkan direktori lainnya diletakkan di luar direktori public_html
.
resources
Direktori ini memiliki tiga buah sub direktori yaitu “assets”, “lang” dan views. Berikut ini adalah penjelas singkat terkait fungsi dari masing-masing sub direktori tersebut:
assets
: Sejak rilis versi 5, laravel memiliki sebuah fitur yang bernama laravel elixir. Fitur ini ditujukan untuk membantu para pengguna laravel untuk meng-compile file less, saas dan coffescript yang mereka buat. Nah, direktori ini ditujukan untuk menyimpan resources tersebut yang nantinya akan secara otomatis dicompile oleh laravel dengan menggunakangulp
dan dipindahkan ke dalam direktoripublic
. Selain itu kita juga dapat menyimpan resources berupa image atau berkas-berkas lain yang nantinya akan dipindahkan oleh laravel kedalam direktoripublic
dengan cara yang sama.lang
: Secara default laravel sudah memiliki support terhadap implementasi localization yang dapat membantu para pengguna framework untuk menciptakan aplikasi web yang multi bahasa. Direktori ini menyimpan seluruh definisi bahasa yang telah kita buat.views
: Direktori ini digunakan untuk menyimpan seluruh file html / template blade yang kita buat.
test
Laravel merupakan sebuah framework yang didesain dengan mindset testable framework. Oleh karena itu, secara default laravel sudah menyediakan library-library yang dibutuhkan untuk dapat melakukan unit testing seperti PHPUnit dan Mockery. Nah, direktori ini berfungsi untuk menyimpan seluruh file test yang dibuat untuk kemudian dijalankan oleh PHPUnit. Untuk menjalankan tes dengan phpunit dengan perintah
vendor/bin/phpunit
IT Begins
Setelah belajar Laravel dan model MVCnya, saya mengerjakan fitur login. Tidak lupa menerapkan TDD, saya membuat unit test terlebih dahulu. TDD itu apa ya? TDD kepanjangan dari Test Driven Development. Secara langsung bahasa indonesianya itu pengembangan yang disetir oleh Pak Test menuju kota tanpa stress. Wah hebat ya ngoding tanpa stress 😅. Mari kita lihat bagaimana implementasinya
- sebelum menulis kode, tuliskan test-nya terlebih dahulu. Pastikan kita memasukkan semua kemungkinan yang dapat kita pikirkan untuk input dan outputnya.
- Jalankan test-nya, dan pastikan test-nya fail karena belum ada kode apapun untuk membuat test-nya pass.
- Ketik working code seminimum mungkin dengan tujuan agar test-nya pass.
- Jalankan test dan cek apakah test-nya pass. Jika belum pass, maka perbaiki working code kita sampai memenuhi ekspektasi dari test.
- Merasa working code yang kita tulis tadi berantakan ? Jangan khawatir, Refactor the code, do some cleaning and DRY-ing. Selama test-nya masih pass, berarti tidak ada masalah dengan kode yang di refactor tersebut.
- Ulangi proses dari no 1–5 untuk fungsi-fungsi lainnya.
TDD memiliki banyak sekali manfaat. TDD akan membuat kita terarah dalam menuliskan code. Selain itu TDD akan meminimalisir bug yang mungkin terjadi, karena implementasi codenya telah diatur oleh tes. Dalam kerjasama tim, TDD juga akan membantu apabila program kita error karena teman kita mengotak-atik code kita.
Sekarang mari kita terapkan TDD pada project sinadin. Berikut adalah salah satu contoh test yang saya buat
Setelah selesai menulis tes, jangan lupa untuk commit terlebih dahulu. dengan perintah
git commit -m "[RED] Membuat tes login"
karena saya baru membuat tes, maka menurut ketentuan PPL 2019, ketika membuat commit diawali dengan tag [RED]. Ketika sudah mengimplementasikan fungsinya dan telah lulus tes, tag yang digunakan adalah [GREEN]. Apabila kita ingin mengganti penamaan variable atau membuat code kita menjadi clean, gunakan tag [REFACTOR]. Sedangkan jika ingin mengganti sesuatu yang tidak berhubungan dengan fungsi utama aplikasi seperti ingin menambah gambar, gunakan tag [CHORES].
Clean Code, Best Code
Setelah menulis tes, sekarang kita mengimplementasikan fungsinya. Ketika menuliskan code, ada beberapa etika yang harus diperhatikan agar code yang kita buat rapi dan bisa dibaca oleh orang lain. Berikut ini adalah fundamental dalam penulisan code yang diimplementasikan pada bahasa pemrograman PHP
- Jangan menambahkan kata yang tidak perlu
- Argumen dari fungsi maximal 2
- Satu fungsi mengerjakan satu task
Laravel telah menyediakan fitur login yang cukup lengkap. Untuk memakainya kita dapat menjalankan perintah artisan make:auth .
Laravel akan membuatkan fungsi login termasuk fitur register, forgot password, dan logout. Jika ingin mengubah implementasinya bisa melakukan override padaa loginController.php .
Sekian tulisan saya kali ini. Semoga teman-teman mengerti dan tertarik dengan framework Laravel ini.
LARAVEL IS ROCK !