Routing menentukan bagaimana aplikasi PHP memetakan URL ke kode yang menjalankannya. Tanpa routing yang rapi, setiap halaman punya file sendiri dan kode duplikat muncul di banyak tempat. Ada beberapa cara membangun routing, dari yang paling dasar hingga memakai library. Perbandingan berikut membantu kamu memilih teknik yang sesuai dengan ukuran dan kompleksitas proyek.
Routing dengan if-else: cepat untuk proyek kecil
Teknik paling dasar adalah memeriksa variabel seperti $_GET['page'] atau path dari $_SERVER['REQUEST_URI'] lalu menjalankan blok kode sesuai nilainya. Cara ini cocok untuk prototipe atau situs dengan sedikit halaman.
$page = $_GET['page'] ?? 'home';
if ($page === 'home') {
require 'views/home.php';
} elseif ($page === 'about') {
require 'views/about.php';
} else {
http_response_code(404);
require 'views/404.php';
}
Kelebihannya jelas: tidak perlu dependensi dan mudah dipahami pemula. Saat halaman bertambah, blok if-else menjadi panjang dan sulit dirawat. Menambah parameter dinamis seperti /user/123 memerlukan penanganan manual yang rawan bug. Untuk aplikasi yang berkembang, pendekatan ini cepat mencapai batasnya.
Routing berbasis regex: fleksibel tanpa library
Dengan ekspresi reguler, kamu bisa mencocokkan pola URL dan mengekstrak parameter. Pola #^/user/(d+)$# misalnya menangkap ID pengguna. Teknik ini lebih kuat dari if-else karena mendukung segmen dinamis.
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$routes = [
'#^/$#' => 'home',
'#^/user/(d+)$#' => 'user',
];
foreach ($routes as $pattern => $handler) {
if (preg_match($pattern, $uri, $matches)) {
// panggil handler dengan $matches[1]
break;
}
}
Regex memberi keleluasaan, tetapi menulis dan memelihara pola bisa membingungkan jika rutenya banyak. Kesalahan kecil pada pola membuat rute tidak pernah cocok. Teknik ini berada di titik tengah: lebih baik dari if-else untuk URL dinamis, tetapi belum serapi library khusus.
Library routing: fitur lengkap, kurva belajar ada
Ada banyak library routing PHP, misalnya FastRoute, AltoRouter, atau router bawaan framework seperti Laravel dan Symfony. Library menawarkan parameter opsional, middleware, grup rute, dan caching. Kamu cukup mendefinisikan rute dengan sintaks yang ringkas.
$router = new AltoRouter();
$router->map('GET', '/user/[i:id]', 'userController#show', 'user_show');
$match = $router->match();
if ($match) {
// panggil controller
}
Menggunakan library berarti menambah dependensi dan mempelajari API-nya. Untuk proyek yang sudah kompleks, investasi ini terbayar karena kode routing menjadi terpusat dan mudah diubah. Jika kamu memakai Composer, menambahkan library routing tidak merepotkan. Untuk proyek kecil, library bisa terasa berlebihan.
Front controller: pola yang mendasari routing modern
Semua permintaan diarahkan ke satu file index.php melalui konfigurasi server (misalnya .htaccess atau Nginx), bukan mengakses file PHP secara langsung. File ini yang kemudian memanggil router. Pola ini memisahkan logika aplikasi dari struktur file dan memudahkan penerapan routing dinamis.
Front controller sering dipakai bersama library routing. Kamu bisa memulai dengan front controller sederhana dan menambahkan regex atau library sesuai kebutuhan. Kelemahannya, konfigurasi server harus benar; jika tidak, URL selain homepage akan menghasilkan 404. Pastikan juga penanganan error dan logging sudah baik, seperti yang dibahas di 7 cara menampilkan pesan error di PHP.
Perbandingan singkat
| Teknik | Kemudahan | Fleksibilitas | Cocok untuk |
|---|---|---|---|
| If-else | Tinggi | Rendah | Prototipe, situs statis |
| Regex | Sedang | Sedang | URL dinamis tanpa library |
| Library | Rendah | Tinggi | Aplikasi menengah-besar |
| Front controller | Sedang | Tergantung router | Semua aplikasi modern |
Pilihan teknik routing di PHP sebaiknya disesuaikan dengan kebutuhan saat ini dan perkiraan pertumbuhan proyek. Jika kamu baru mulai, front controller dengan regex sudah cukup. Saat rute makin banyak, beralih ke library akan menghemat waktu perawatan.
Kesalahan yang sering terjadi
Salah satu jebakan adalah mencampur logika routing dengan logika bisnis. Pisahkan definisi rute dari kode controller agar mudah diuji. Perhatikan juga keamanan: selalu validasi parameter yang diambil dari URL, misalnya dengan casting ke integer atau whitelist. Untuk mencegah serangan yang memanfaatkan input pengguna, terapkan prinsip yang sama seperti saat menghindari SQL injection, yang bisa kamu pelajari di 7 teknik menghindari SQL injection di PHP.
Jika aplikasi memakai AJAX, routing juga perlu menangani permintaan ke endpoint API. Pastikan respons konsisten, misalnya selalu mengembalikan JSON. Panduan lengkap tentang menampilkan data dari AJAX jQuery ke tabel HTML bisa menjadi referensi praktis untuk integrasi ini.
Bagi yang suka menonton olahraga seperti basket, sepakbola, atau UFC, ada baiknya mengatur waktu dengan baik agar coding tetap jalan. Jika ingin menonton bareng secara gratis dengan host yang menghibur, bisa kunjungi tarkamlive.
Ringkasan
Routing di PHP bisa dimulai dari if-else sederhana, ditingkatkan dengan regex, lalu beralih ke library saat kompleksitas bertambah. Front controller menjadi fondasi yang baik untuk aplikasi modern. Pilih teknik yang paling sesuai dengan tim dan proyekmu, lalu evaluasi ulang ketika kebutuhan berubah.
Pertanyaan yang Sering Diajukan
Apakah routing dengan if-else masih layak dipakai?
Untuk proyek kecil dengan sedikit halaman, if-else masih layak karena tidak perlu dependensi. Jika jumlah rute bertambah atau ada parameter dinamis, pertimbangkan teknik lain.
Apakah saya harus memakai library routing?
Tidak harus. Library membantu ketika aplikasi memiliki banyak rute dan fitur seperti middleware. Untuk proyek sederhana, regex atau front controller manual sudah cukup.
Bagaimana cara mengamankan parameter dari URL?
Selalu validasi dan sanitasi parameter. Gunakan casting ke tipe data yang diharapkan, whitelist nilai yang diizinkan, dan hindari langsung memakai parameter dalam query database tanpa prepared statement.