Request Lifecycle

Ringkasan

Saat menggunakan alat pada “dunia nyata”, akan lebih percaya diri bila mengerti bagaimana cara kerja alat tersebut. Pengembangan aplikasi juga sama halnya. Jika memahami cara kerja tool development, akan lebih menambah kenyamanan dan kepercayaan diri saat menggunakan. Yujuan dr dokumentasi ini adalah memberikan ulasan yg baik dan mendalam tentang cara kerja Laravel. Dgn mengetahuinya, hilanglah kesan “magic” dan menambah kepercayaan diri dalam membangun aplikasi. Sbg tambahan ulasan yg lebih dalam dr request lifecycle, kita akan membahas “start files” dan application event.

Jika belum paham maksudnya, tak mengapa. Cukup pahami secara umum saja apa yg terjadi, nantinya akan nampak lebih jelas ketika mempelajari bagian lain dokumentasi.

Request Lifecycle

Semua request ke aplikasi akan diarahkan ke skrip public/index.php. Ketika menggunakan Apache, file .htaccess yg sepaket bersama Laravel akan mengumpankan semua request tsb ke index.php. Dari sini, Laravel memulai proses pengolahan request dan mengembalikan (return) respon ke client (browser). Memahami konsep bootstrap (loading awal) Laravel akan sangat berguna, jadi akan dibahas sekarang!

Sejauh ini, konsep terpenting ketika proses bootstrap Laravel adalah Service Provider. Daftar service provider dapat dilihat di file app/config/app.php pada array providers. Provider ini berfungsi sbg mekanisme bootstrap utama Laravel. Tapi, sebelum menggali lebih dalam tentangservice provider, kita kembali dulu ke file index.php. Setelah request masuk ke file tsb, file bootstrap/start.php akan dimuat (load). File ini akan membuat sebuah objek Application baru Laravel, yg jg bekerja layaknya IoC container.

Setelah membuat objek Application, beberapa project path akan diset dan  deteksi environment akan berjalan. Kemudian, bootstrap internal Laravel akan dipanggil. File ini ada jauh di dalam kode sumber Laravel, dan mengaktifkan beberapa seting berdasarkan file konfigurasi yg dibuat, seperti timezone, error reporting, dll. Tapi, disamping seting konfigurasi yg sederhana tsb, jg melakukan tugas yg sangat penting. Yaitu registrasi semua service provider yg dikonfigurasi pada aplikasi.

Service provider sederhana hanya memiliki satu method : register. Method tersebut akan dipanggil ketika service provider diregistrasikan oleh objek aplikasi via method  register. Di dalam method ini, service provider meregistrasikan banyak hal dgn IoC container. Terutama, tiap service provider mengaitkan  beberapa closure ke container, yg memungkinkan akses berbagai layanan (services) khusus pada aplikasi. Misalnya, QueueServiceProvider  meregistrasikan closure yg menangani class terkait dgn Queue. Tentunya, service provider dapat digunakan untuk berbagai tugas saat bootstrap, tak hanya registrasi dgn IoC Container. Service provider dapat meregistrasikan event listener, view composer, Artisan command, dsb.

Setelah semua service provider teregistrasi, file app/start akan dijalankan. terakhir, file app/routes.php dijalankan. Setelah routes.php dimuat, objek Request akan dikirim ke objek aplikasi sehingga dapat diarahkan ke route yg dimaksud.

Jadi urutan prosesnya:

  1. Request masuk ke file public/index.php.
  2. File bootstrap/start.php  membuat objek Application dan deteksi environment.
  3. Internal framework/start.php mengatur seting konfigurasi dan memuat/load service providers.
  4. File Application app/start diload.
  5. File Application app/routes.php diload.
  6. Objek Request dikirim ke Application, kemudian mengembalikan/return objek Response.
  7. Objek Response dikirim kembali ke client.

Sekarang Anda telah mengetahui bagaimana request ke Laravel ditangani, mari kita lihat file “start”!

Start Files

File-file tersebut tersimpan di app/start. Default, ada tiga file: global.phplocal.php, dan artisan.php. Untuk informasi lebih lanjut mengenai artisan.php, lihatlah dokumentasi di Artisan command line.

File global.php berisi beberapa item dasar secara default, seperti registrasi Logger dan memanggil/include file app/filters.php. Tapi, dapat juga ditambah apapun yg diinginkan. Tambahan itu akan otomatis include pada setiap request ke application, tanpa melihat environment. Lain halnya dgn file local.php, hanya dipanggil bila application dieksekusi dalam environtment local. Untuk informasi tentang environments, cek dokumenasi tentang konfigurasi.

Jika ada environtment lain selain local, dapat dibuat start file juga. File tersebut akan dipanggil/include ketika aplikasi berjalan pada environtment tersebut. Misalkan, ada  environment development pada konfigurasi file bootstrap/start.php, maka dibuatlah file app/start/development.php, yg akan dipanggil ketika berjalan pd environtment tsb.

Apa Saja yg Diisikan ke Start Files

Start files bekerja sebagai tempat isian berbagai kode “bootstrapping”. Misal, registrasi View composer, konfigurasi polihan log, seting PHP dsb. Terserah Anda. Tapi bisa jadi kurang rapi bila semua kode bootstrap dimasukan ke start file. Untuk aplikasi besar, atau jika merasa kurang rapi, pertimbangkan untuk memindah sebagian kode bootstrap ke service providers.

Application Events

Sebelum dan sesudah request dapat disisipi proses tambahan dgn meregistrasikan  beforeafterfinish, dan shutdown pada application events:

Registrasi Application Events

App::before(function($request)
{
    //
});

App::after(function($request, $response)
{
    //
});

Listener ke event ini akan berjalan sebelum (before) dan sesudah (after) tiap request ke application. Event ini dapat membantu untuk global filtering atau modifikasi global responses. Registrasi dapat dimasukan ke start file atau pada service provider.

Dapat jg diregistrasikan listener pada event matched, dimana akan terpicu sebelum memproses request yg datang dgn route tertentu:

Route::matched(function($route, $request)
{
    //
});

Event finish dipanggil setelah response dr application telah terkirim ke client/browser. Disini adalah tempat terbaik untuk proses-proses akhir yg dibutuhkan. Event shutdown dipanggil segera setelah semua event finish selesai diproses, dan merupakan kesempatan terakhir untuk menambahan skrip/proses sebelum terminasi. Biasanya, kedua event akan sangat jarang digunakan.