Belajar CodeIgniter 3 – Dasar Routing

Pada postingan sebelumnya saya telah memberikan sedikit ulasan tentang dasar OOP, dasar MVC, struktur direktori dan environment dari CI3. Sekarang, kita memasuki tahap routing, di mana ini adalah alur daripada aplikasi CI yang akan nantinya Anda buat. Sebelum memasuki tahap MVC. kita wajib mengetahui pengtahuan tentang dasar routing ini. Bagaimana tidak? Karena ini routing inilah tempat dimana kita menentukan default controller dan mengatur URL dari aplikasi kita.

Memulai

Untuk direktori routing ini berada pada application/config/routes.php

ci3-routing-2
Dari situ, kita akan membuat alur aplikasi CI kita. Secara default file routes.php sebagai berikut:

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

Pada bagian kode $route['default_controller'] = 'welcome'; itu menunjukan tentang default controller atau controller yang pertama kali dibaca oleh CI, default nya adalah ada pada controller welcome.

Jika Anda ingin merubah $route['default_controller'] = 'welcome' menjadi nama lain misalnya $route['default_controller'] = 'selamatdatang'. Maka Anda wajib pula merubah file di application/controllers/Welcome.php Anda rename file tersebut menjadi Selamatdatang.

ci3-routing-1
Perhatian!
Dalam CI penamaan file pada controller wajib huruf awal dengan huruf kapital, dalam contoh artikel ini adalah selamatdatang, maka di tulis dengan Selamatdatang. Begitu juga dalam class nya wajib huruf awal dengan kapital.

ci3-routing-3
Kemudian untuk kode $route['404_override'] = ''; ini adalah berfungsi untuk memberi tahu CI apabila default controller tidak ditemukan atau jika ada controller lain atau halaman lain yang tidak ditemukan. Sebagai contoh:

$route['default_controller'] = 'selamatdatang';
$route['404_override'] = 'galat';
$route['translate_uri_dashes'] = FALSE;

ci3-routing-4

Kemudian Anda buat file di application/controllers/Galat.php dan isikan kode sebagai berikut:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Galat extends CI_Controller {
    public function index()
    {
        echo "Halaman tidak ditemukan";
    }

}

Coba Anda buat sengaja meng-error-kan CI Anda, misalnya dengan memasukan URL http://localhost/ci3/index.php/error404 maka browser Anda akan menampilkan sebagai berikut:

ci3-routing-5
Kemudian untuk kode $route['translate_uri_dashes'] = FALSE; Ini adalah berfungsi jika Anda merubah nilainya menjadi TRUE, maka Anda dibolehkan dalam URL browser Anda menulis dengan tanda dash (-). Sebagai contoh Anda ingin menjadikan Controller Selamatdatang Anda menjadi selamat-datang, maka Anda ubah pada routes.php sebagai berikut:

$route['default_controller'] = 'selamat_datang';
$route['404_override'] = 'galat';
$route['translate_uri_dashes'] = TRUE;

Kemudian pada file application/controllers/Selamatdatang.php Anda rename menjadi selamat_datang.php.

ci3-routing-6
Begitu juga pada class nya Anda rubah menjadi class Selamat_datang extends CI_Controller . Pertanyaannya, mengapa harus menggunakan underscore pada nama file dan nama class controller nya? Dalam PHP nama class tidak boleh menggunakan tanda dash (-) (tanda strip dalama bahasa Indonesianya), dan ini juga berpengaruh pada penamaan file, di mana CI membaca class controller berdasarkan nama file.

Jika semua sudah dilakukan kemudian mari kita tes dengan link berikut: http://localhost/ci3/index.php/selamat-datang

ci3-routing-7
Mudah bukan?

Menghilangkan index.php

Pada kasus contoh di artikel ini, saya selalu menulisan link dengan index.php nya, misalnya tadi http://localhost/ci3/index.php/selamat-datang. Untuk memperindah atau menjadikan pretty URL halaman web kita dengan menghilangkan index.php maka perlu langkah berikut:

  1. Pastikan module mod_rewrite dalam Apache Anda sudah aktif. Dengan cara httpd -M | grep rewrite.
  2. Anda buat dahulu file .htaccess di dicretory CI Anda. Untuk pengguna Unix/Unix-like atau Linux, pastikan File Manager Anda sudah diaktifkan pengaturan show hidden file.
    ci3-routing-8
  3.  Kemudian masukan kode berikut pada file .htaccess:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
  4.  Pastikan pada application/config/config.php Anda kode $config['index_page'] = ''; bernilai kosong.
    ci3-routing-9
  5. Jika sudah langkah terakhir adalah mengtesnya misalnya: http://localhost/ci3/selamat-datang

ci3-routing-10

Kesimpulan

Routing merupakan bagian awal terpenting sebelum memulai menggunakan framework. Bagaimana tidak? Dengan adanya routing ini lah yang memberi tahu framework tentang alur aplikasi yang akan kita buat. Pada artikel ini saya memberikan sebuah routing di CI secara sederhana, ini belum semuanya tuntas karena hanya pada dasar pengetahuan saja. Insya Allah pada artikel berikutnya saya akan lebih memperjelas masalah routing ini.

Semoga bermanfaat.

Artikel Terkait

17 responses to “Belajar CodeIgniter 3 – Dasar Routing”

  1. kerberos Avatar
    kerberos

    Sangat bermanfaat gan, nice post!
    ane dah nyari2 bingung

    1. Ali Avatar
      Ali

      bingung dimananya?

  2. hanafi06 Avatar

    mas saya kok ga bisa bagian yang .htacces itu ya? malah error 404

    1. Ali Avatar
      Ali

      Pastikan mod_rewrite sudah aktif dari Apache nya.

  3. puji Avatar
    puji

    ip lah. thanks

  4. dustin Avatar
    dustin

    bang ali, mungkin ada perbedaan nama pada apache? punya saya rewrite_module kalo status (shared) berarti udah on kan?saya cek d console httpd -M

    1. Ali Avatar
      Ali

      Ya kalau di Archlinux cara mengeceknya seperti itu httpd -M | grep rewrite dan hasilnya akan rewrite_module (shared). Itu artinya sudah aktif. Kalau di distro lain misalnya Ubuntu cara ceknya yakni lihat di ls -l /etc/apache2/mods-enabled

  5. xabitortilla Avatar

    Mas saya ada 2 pertanyaan nih,
    1. Seberapa penting menggunakan route di CI ? setahu saya route di CI gak wajib ya? beda banget sama Laravel yg memang mengharuskan routingnya dibikin di tiap page/proses yang kita buat. Bener gak begitu?
    2. Saya menggunakan NGINX, bagaimana caranya menghilangkan “index.php” ?

    Terimakasih mas

    1. Ali Avatar
      1. Seberapa penting. Sangat penting untuk membuat spesifik Link dan perbedaan nama antara URL dengan nama controllernya. Contoh:
        $route['product/:num'] = 'catalog/product_lookup';
        Kode tersebut mangharuskan menggunakan angka, juga nama class pada controllernya berbeda dengan URL routing.

      2. Tambahkan:
        location / {
        try_files $uri $uri/ /index.php?$query_string;
        }

  6. Irsyad Avatar
    Irsyad

    Mas kok saya masih gagal ya? Padahal udah mengikuti step yang diajarkan

    1. Ali Avatar

      Gagalnya di mana?

      1. Irsyad Avatar
        Irsyad

        Gagalnya pas menjalankan langkah yang ini(Jika sudah langkah terakhir adalah mengtesnya misalnya: http://localhost/ci3/selamat-datang) hasilnya malah object not found

      2. Irsyad Avatar
        Irsyad

        dan yang lebih anehnya lagi file selamat datangnya cuman bisa diakses lewat http://localhost/ci3/index.php/selamat-datang kemudian saya coba akses localhost/ci3 yang ada malah muncul pesan “halaman tidak ditemukan”

        1. Ali Avatar

          artinya controllernya salah

  7. Afan Avatar
    Afan

    Mau nanya min, url halaman saya : localhost/spk/alternatif
    didalam halama alternatif ada link untuk menambah data alternatif
    biar url nya jadi : localhost/spk/alternatif/tambah itu gimana ya min?

    1. Ali Avatar

      Itu di Controller Alternatif tinggal tambahin aja functionnya

      function tambah() {
      ...
      }

  8. dewi maliana Avatar

    Terimakasih untuk informasinya sangat menarik sekali

Leave a Reply to Ali Cancel reply

Your email address will not be published. Required fields are marked *