Ngulik Tuntas Sistem Routing dan Controller di CodeIgniter: Bikin Aplikasi Anti Nyasar!

Routing & Controller CodeIgniter: Panduan Lengkap Anti Nyasar

PPLG

PPLG

Penulis

02 Sep 2026
71 x dilihat

Halo gaes! Pernah gak sih ngerasa aplikasi web itu kayak labirin yang super kompleks? Tiap kali kita akses URL, kok bisa-bisanya aplikasi tahu mau kemana dan data apa yang harus ditampilin? Nah, di CodeIgniter, ada dua jagoan utama yang bikin semua itu terorganisir rapi dan anti nyasar: Sistem Routing dan Controller! Skuy, kita bedah tuntas biar skill CI-mu makin GG dan kamu bisa bikin aplikasi yang smooth abis!

Kenapa Routing dan Controller Penting Banget di CodeIgniter?

Bayangin gini, gaes. Aplikasi web-mu itu kayak restoran besar.

  • Routing itu adalah "resepsionis" atau "peta petunjuk" di restoranmu. Dia yang nerima tamu (request URL), terus ngarahin tamunya ke bagian mana yang pas. Mau ke meja kasir? Meja makan utama? Atau mau ke dapur? Si resepsionis ini yang nentuin.
  • Controller itu adalah "kepala chef" atau "manager" di masing-masing bagian restoran. Kalau tamu diarahkan ke "meja makan utama", nah si manager meja makan utama ini yang bertanggung jawab. Dia yang ngatur pelayan (model untuk data), nyiapin menu (data yang akan ditampilkan), terus nampilin ke tamu (view).

Jadi, mereka berdua ini adalah duo maut yang bekerja sama secara harmonis di balik layar framework MVC (Model-View-Controller) CodeIgniter. Routing nentuin "kemana", Controller yang "ngerjain apa". Paham kan vibes-nya?

Sistem Routing di CodeIgniter: Si Penunjuk Jalan Cerdas

CodeIgniter punya sistem routing yang powerful banget. Intinya, kita bisa mendefinisikan URL custom yang lebih user-friendly dan SEO-friendly, ketimbang langsung akses nama file controller secara mentah.

File konfigurasi utama untuk routing ada di app/Config/Routes.php. Yuk, kita intip gimana cara kerjanya!

Dasar-Dasar Routing

Secara default, CodeIgniter akan mencoba mencari Controller dan Method yang cocok dengan segmen URL. Misalnya, http://localhost/users/profile akan mencoba memanggil method profile() di Controller Users. Tapi, kita bisa bikin lebih rapi pakai routing!

1. Basic Routing: Memetakan URL ke Controller & Method Paling simpel, kamu bisa memetakan URL root (/) ke Controller dan Method tertentu.

// app/Config/Routes.php

<?php

namespace Config;

use CodeIgniter\Router\RouteCollection;

/**
 * @var RouteCollection $routes
 */
$routes->setDefaultNamespace('App\Controllers'); // Namespace default Controller
$routes->setDefaultController('Home');          // Controller default jika URL kosong
$routes->setDefaultMethod('index');             // Method default jika tidak disebutkan
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true); // Hati-hati dengan ini di produksi!

// Rute utama aplikasi
$routes->get('/', 'Home::index'); // Ketika akses domain.com/, panggil Home Controller, method index()
$routes->get('/about', 'Pages::about'); // Ketika akses domain.com/about, panggil Pages Controller, method about()

// Rute untuk blog
$routes->get('/blog', 'Blog::index');
$routes->get('/blog/read', 'Blog::read'); // URL ini cuma bisa diakses dengan GET request
  • $routes->get('/', 'Home::index');: Ini artinya, kalau ada request dengan method HTTP GET ke root URL (/), CodeIgniter bakal langsung panggil index method di Home Controller. Simpel, kan?

2. Routing dengan Wildcard / Placeholders Kita sering butuh URL yang dinamis, misalnya menampilkan detail produk berdasarkan ID. Di sinilah wildcard alias placeholders berguna.

// app/Config/Routes.php

// Ambil data user berdasarkan ID numerik
$routes->get('/users/(:num)', 'Users::show/$1');

// Ambil data artikel berdasarkan slug (bisa string apapun)
$routes->get('/artikel/(:any)', 'Artikel::detail/$1');

// Menggunakan segmen lain, misalnya kategori dan slug
$routes->get('/produk/(:alpha)/(:any)', 'Produk::tampilkan/$1/$2');
  • (:num): Wildcard ini cuma akan match dengan angka (numerik). $1 akan mengambil nilai dari segmen pertama setelah /users/.
  • (:any): Ini wildcard paling fleksibel, akan match dengan segmen apa pun.
  • (:alpha): Match dengan huruf alfabet saja.
  • $1, $2, dst.: Ini adalah cara CodeIgniter untuk meneruskan nilai dari wildcard ke parameter method Controller.

3. Routing Berdasarkan HTTP Verb Kadang kita pengen URL yang sama tapi punya fungsi beda tergantung method HTTP-nya (GET, POST, PUT, DELETE). Ini penting banget buat API RESTful!

// app/Config/Routes.php

// Menampilkan daftar produk (GET)
$routes->get('/products', 'Products::index');

// Menambahkan produk baru (POST)
$routes->post('/products', 'Products::create');

// Mengupdate produk tertentu (PUT)
$routes->put('/products/(:num)', 'Products::update/$1');

// Menghapus produk tertentu (DELETE)
$routes->delete('/products/(:num)', 'Products::delete/$1');

Keren, kan? Satu URL (/products) bisa punya berbagai fungsi tergantung method request-nya.

4. Route Groups: Merapikan Route yang Mirip Kalau kamu punya banyak route dengan prefix URL yang sama (misalnya /admin/dashboard, /admin/users, /admin/settings), kamu bisa pakai group biar kodenya rapi dan gak berulang.

// app/Config/Routes.php

$routes->group('admin', function($routes){
    $routes->get('/', 'Admin\Dashboard::index'); // /admin
    $routes->get('users', 'Admin\Users::list'); // /admin/users
    $routes->post('users/add', 'Admin\Users::add'); // /admin/users/add
});

Sekarang, semua route di dalam group admin secara otomatis akan punya prefix /admin/. Lebih rapi dan mudah dibaca, ngab!

Controller di CodeIgniter: Sang "Otak" Aplikasi

Nah, setelah resepsionis (Routing) mengarahkan tamu, giliran Kepala Chef (Controller) yang beraksi. Controller adalah class PHP yang bertanggung jawab menangani request, memproses logika bisnis, berinteraksi dengan model (database), dan akhirnya memuat view untuk ditampilkan ke user.

Membuat Controller

Semua file Controller disimpan di direktori app/Controllers. Mari kita buat Controller sederhana bernama Home.php.

1. Buat File Controller Buat file baru: app/Controllers/Home.php

// app/Controllers/Home.php

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        // Ini adalah method yang akan dipanggil ketika URL / diakses
        // Di sini kita bisa memuat view atau melakukan logika lainnya
        return view('welcome_message'); // Memuat file view: app/Views/welcome_message.php
    }

    public function about()
    {
        // Method untuk halaman "Tentang Kami"
        $data['page_title'] = 'Tentang Kami';
        $data['description'] = 'Ini adalah halaman tentang aplikasi kita, gaes!';

        // Mengirim data ke view
        return view('pages/about', $data); // Memuat app/Views/pages/about.php
    }
}

Penjelasan:

  • namespace App\Controllers;: Penting banget untuk menentukan namespace agar CodeIgniter bisa menemukan Controller ini.
  • class Home extends BaseController: Setiap Controller harus meng-extend BaseController yang menyediakan fungsionalitas dasar.
  • public function index(): Ini adalah method default yang akan dipanggil jika kita hanya menyebut nama Controller-nya saja (misalnya /home atau / jika Home adalah default controller). Di sini, kita me-return view('welcome_message') untuk menampilkan halaman HTML.
  • public function about(): Kamu bisa bikin method lain sesuai kebutuhan. Di sini, kita passing data ke view.

2. Contoh Controller dengan Parameter dari Routing Misalnya, kita punya route: $routes->get('/user/(:num)', 'Users::profile/$1');. Maka, Controller Users akan menerima ID user sebagai parameter.

// app/Controllers/Users.php

<?php

namespace App\Controllers;

use App\Models\UserModel; // Misal ada model untuk user

class Users extends BaseController
{
    public function profile($userId)
    {
        // Di sini $userId akan berisi nilai dari (:num) di rute
        // Spill data user dari database (misal pakai Model)
        $userModel = new UserModel();
        $user = $userModel->find($userId); // Ambil data user dari DB

        if ($user) {
            $data['user'] = $user;
            return view('users/profile', $data); // Tampilkan halaman profil user
        } else {
            // Kalau user tidak ditemukan, lempar 404 atau redirect
            throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound('User tidak ditemukan, gaes!');
        }
    }
}

Tips & Best Practices Biar Aplikasi Makin Cihuy!

  1. Gunakan URL yang Bersih dan Deskriptif: Hindari URL macam index.php?controller=user&action=profile&id=123. Pakai routing untuk bikin users/profile/123. Lebih ramah SEO dan gampang diingat!
  2. Organisir Route dengan Rapi: Gunakan Route Groups untuk mengelompokkan route yang punya kemiripan (misal, admin panel, API).
  3. Hindari Logic di Route: Routing itu tugasnya cuma mengarahkan. Semua logika bisnis, validasi, dan interaksi database harus di Controller atau Model. Jangan campurin, nanti pusing sendiri!
  4. Satu Controller, Satu Tujuan: Usahakan setiap Controller punya tujuan yang jelas. Jangan bikin satu Controller jadi 'supermarket' yang nanganin semuanya. Misalnya, UserController khusus urusan user, ProductController urusan produk.
  5. Validasi Input di Controller: Sebelum memproses data dari user (misalnya dari form POST), WAJIB banget divalidasi di Controller. CodeIgniter punya fitur validasi yang powerful, jadi manfaatkan!
  6. setAutoRoute(false) di Produksi: Meskipun setAutoRoute(true) nyaman saat development, ini berpotensi jadi celah keamanan karena memungkinkan akses ke method Controller yang tidak diinginkan. Selalu set setAutoRoute(false) saat aplikasi sudah siap di-deploy ke production, dan definisikan semua route secara eksplisit!
  7. Manfaatkan Filter: CodeIgniter punya Route Filters yang bisa kamu gunakan untuk logic pre-routing atau post-routing, misalnya untuk otentikasi (apakah user sudah login?) atau logging. Spill ilmunya nanti di sesi berikutnya ya!

Kesimpulan: Jadi Master Routing & Controller!

Gimana gaes? Udah mulai paham kan gimana Routing dan Controller ini jadi duo maut di CodeIgniter? Mereka itu kayak konduktor orkestra yang bikin semua berjalan harmonis. Routing memastikan setiap request tahu jalannya, dan Controller adalah eksekutor cerdas yang menyelesaikan tugasnya.

Dengan menguasai konsep ini, dijamin deh, bikin aplikasi web jadi makin seru, terstruktur, dan gampang di-maintain. Kamu bisa lebih fokus ke fitur daripada pusing mikirin "kok URL ini gak bisa diakses ya?". Jadi, jangan ragu buat eksplorasi lebih jauh dan bikin project-project keren pakai CodeIgniter ya! Semangat ngodingnya, ngab!

5.0

Berikan Rating

Komentar (0)

Silakan login untuk memberikan komentar.

Login Sekarang

Belum ada komentar. Jadilah yang pertama!

Menyukai Artikel (1)