Pada artikel ini kita akan membahas mengenai pengembangan web dengan pattern MVC menggunakan PHP. Kita tidak akan menggunakan framework tapi akan menulis sendiri seluruh komponen yang dibutuhkan. Code akan kita tulis di-inspirasi oleh framework Laravel.
Contoh code dari artikel ini bisa dilihat di todo-project-php.
Kita akan mengeksplorasi beberapa konsep yang umum ditemukan pada web framework seperti router, controller, view, controller dan middleware.
Disclaimer, code yang akan kita tulis belum production ready. Contoh code hanya digunakan untuk tujuan pembelajaran konsep MVC pada pengembangan web.
Pada seri pertama ini kita akan membahas mengenai entry point. Oke, mari kita mulai!
PHP Entry Point#
Hal pertama yang akan kita kerjakan adalah mem-forward seluruh request ke script PHP ke satu script yang menjadi entry point.
Secara tradisional, model eksekusi web PHP adalah sebagai berikut:
- user mengirimkan request ke web server
- web server memproses request dan memilih script PHP yang akan dijalankan
sesuai dengan URL request. Biasanya URL request berisikan nama script PHP yang
akan dijalankan misalnya:
http://localhost/index.php
atauhttp://localhost/hello.php
- web server mengeksekusi script PHP dengan mengirimkan request ke script
- Script PHP memproses request, menghasilkan response (atau error) dan dikirimkan kembali ke web server
- Web server mengirimkan response ke user
Berdasarkan model eksekusi di atas, user dapat mengakses sembarang file script PHP yang di-hosting. Implikasinya kita perlu meng-require seluruh code pada seluruh file script PHP. Selain tidak scalable, hal ini akan mempolusi code yang akan dikembangkan.
Untuk mengatasi masalah ini, kita akan membuat sebuah script PHP yang menjadi entry point. Seluruh request akan diarahkan ke script entry point ini dan script ini yang akan meng-require script PHP lain sesuai dengan path logic yang dilalui pada pemrosesan request.
User tidak lagi bisa mengakses file script PHP secara random. Code yang kita kembangkan menjadi lebih terstruktur dan rapi.
Cara meng-forward request ke script PHP ini tergantung pada web server yang digunakan.
Untuk contoh code yang akan kita kerjakan, kita akan letakkan source code di /todo/
.
Untuk web server Apache, kita akan menggunakan RewriteEngine
untuk mem-forward
request ke satu file script PHP.
.htaccess
RewriteEngine On
RewriteBase /todo/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /todo/index.php [L]
File .htaccess
in diletakkan di directory yang menghosting file script PHP.
Web server Apache akan membaca konfigurasi dari .htaccess
dan
meng-apply rule RewriteEngine
untuk meng-forward seluruh request
ke script /todo/index.php
.
File index.php
nantinya akan menerima seluruh request dari user dan
memanggil code PHP yang lain sesuai dengan kebutuhan. index.php
ini
adalah entry point kita.
Contoh, untuk saat sekarang kita cuma tampilkan Hello World
.
index.php
<?php
echo "Hello World";
Sekarang, ketika user mengakses http://localhost/todo
semua request akan
diproses oleh index.php
sebagai script entry point.
Berikut ini isi directory di project kita pada seri pertama ini:
.
├── .htaccess
└── index.php