Kenapa uri segmen tidak berfungsi

Selamat datang di tutorial warung belajar, dalam tutorial kali ini kita akan melanjutkan pembahasan dari seri tutorial codeigniter 4, dalam tutorial kali ini kita akan membahas cara mengatur routing di codeigniter 4.

Dalam tutorial sebelumnya kita sudah membahas mengenai cara membuat controller di Codeigniter 4, sengaja saya bahas itu dulu karena memang nantinya saat kita belajar membuat routing di codeigniter 4, kita akan banyak menggunakan controller, jadi memang sengaja saya bahas agar teman – teman tidak bingung saat saya menggunakan controller.

Video Tutorial Belajar Codeigniter 4 – Mengatur Routing di Codeigniter 4

Untuk teman – teman yang terbiasa belajar dengan melihat video tutorial, bisa tonton video tutorial kita di youtube, terkait cara mengatur routing di Codeigniter 4

Mengenal Routing

Routing adalah sebuah fitur yang disediakan oleh codeigniter 4, fitur ini digunakan untuk mengatur ketika pengguna aplikasi mengakses URL tertentu apa sih yang akan dilakukan oleh Codeigniter ?

Akan diarahkan ke controller dan method mana ? hal ini sangatlah penting untuk mengatur proses yang dilakukan codeigniter ketika ada request dari pengguna aplikasi.

Mungkin pembahasanya agak rumit ya… kita akan coba sederhanakan ya, perhatikan URL dibawah ini :

www.example.com/profil

diatas ada contoh sebuah URL, dimana URL utamanya adalah www.example.com, berikutnya disitu ada tulisan profil, nah ketika kita mengakses URL itu maka web akan memberikan response tampilan tertentu, nah hal seperti ini diatur dibagian routing.

Routing mengatur jika ada request URL dari pengguna, apa sih yang akan dilakukan oleh aplikasi web, itu fungsi dari routing.

Walaupun codeigniter ini tidak seperti laravel, yang mengharuskan setiap halaman harus kita buatkan routing, codeigniter lebih dinamis, meskipun kita tidak menuliskan perintah di routing, controller serta method didalamnya masih dapat kita akses dengan memperhatikan URI Segment yang ada di Codeigniter, jadi disini akan saya singgung terkait Penggunaan URI Segment di Codeigniter 4.

Perhatikan URL dibawah ini :

www.example.com/siswa/profil/12

Kita akan coba membagi URL diatas menjadi beberapa bagian sesuai dengan URI Segment, menjadi seperti berikut ini :

  • www.example.com adalah URL utama dari web
  • siswa adalah Segment 1 yang merupakan nama controller
  • profil adalah Segment 2 yang merupakan nama methodnya
  • 12 adalah Segment 3 yang merupakan nilai parameter pertama dari method pada segment 2

jadi jika diartikan URL diatas akan mengakses method profil pada controller siswa, serta mengirimkan nilai angka 12 sebagai nilai dari parameter di method profil.

itu adalah URI Segment, jika anda tidak mendaftarkan controller atau method melalui routing, anda bisa menggunakan URI segment ini untuk mengakses controller ataupun method tanpa mendaftarkannya dibagian routing.

tetapi jika anda ingin membuat URL yang custom, anda bisa memanfaatkan fitur routing.

Membuka File untuk setting Routing

Saya asumsikan teman – teman sudah menginstall Codeigniter 4 di komputer teman – teman, dalam contoh ini direktori project saya bernama ci4app, dan saya simpan di web direktori dari xampp, yaitu berada c:/xampp/htdocs/ci4app

Untuk mengakses file untuk setting routing, anda bisa membukanya pada file app/Config/Routes.php

pada file ini terdapat 1 routing bawaan codeigniter, perhatikan pada Line 33

$routes->get('/', 'Home::index');

$routes->get('/', 'Home::index');

Keterangan :

pada baris perintah route tersebut ada 3 bagian yang perlu anda perhatikan :

  1. yang pertama adalah HTTP Request Method, dalam contoh diatas adalah get, jika kita isi dengan get, maka akan membaca URL yang kita tuliskan di URL Browser, jika anda membuat pemrosesan terhadap entrian form bisa menggunakan post
  2. yang kedua adalah URL yang akan digunakan, dalam contoh diatas kita menuliskan ‘/‘ artinya adalah mengakses halaman utama dari webnya
  3. yang ketiga adalah controller dan method apa yang akan diakses saat pengguna aplikasi mengakses url dibagian kedua.

jadi kalau kita melihat contoh routing diatas, ketika kita mengakses halaman utama dari web codeigniternya, maka codeigniter akan mengarahkan untuk mengakses method index didalam controller Home

Menambahkan Routing baru

Berikutnya kita akan belajar untuk menambahkan routing baru, untuk bahan belajar, silahkan buat sebuah Controller dengan nama Siswa.

Buat file baru dengan Siswa.php dan simpan di folder app/Controllers, untuk isi codenya adalah sebagai berikut ini :

<?php namespace App\Controllers; class Siswa extends BaseController { public function index() { echo 'Halo ini adalah controller Siswa'; } public function profil() { echo 'Ini adalah method profil di controller Siswa'; } }

<?php

namespace App\Controllers;

class Siswa extends BaseController

{

    public function index()

    {

        echo 'Halo ini adalah controller Siswa';

    }

    public function profil()

    {

        echo 'Ini adalah method profil di controller Siswa';

    }

}

Keterangan :

  • Kita buat controller dengan nama Siswa, sehingga classnya kita berikan nama Siswa.
  • didalamnya kita buat 2 method dengan nama index, dan profil

Baik kita akan mencoba mengakses 2 method tersebut, kita jalankan dulu local development server dengan menuliskan perintah :

php spark serve

lalu akses URL berikut ini :

http://localhost:8080/siswa

http://localhost:8080/siswa

Maka akan menampilkan tulisan :

Halo ini adalah controller Siswa

Hal ini dikarenakan kita mengakses controller siswa, ingat untuk URI Segment pertama, yang kita tuliskan setelah alamat webnya adalah controller, karena kita tidak menuliskan methodnya sebagai URI Segment kedua, maka otomatis mengakses method index, sehingga yang tampil adalah tulisan “Halo ini adalah controller Siswa”, karena method yang otomatis diakses ketika kita tidak menulisnya di URI Segment kedua setelah controller adalah method index

Berikutnya akses URL berikut ini :

http://localhost:8080/siswa/profil

http://localhost:8080/siswa/profil

maka akan menampilkan tulisan :

Ini adalah method profil di controller Siswa

Ini adalah method profil di controller Siswa

perhatikan dibagian URL kita menuliskan URI Segment 1 adalah siswa, dan URI Segment 2 adalah profil, yang artinya kita mengakses method profil di bagian controller siswa, sehingga menampilkan text “Ini adalah method profil di controller Siswa”

Lalu berikutnya bagaimana kalau kita ingin, saat kita mengakses URL seperti dibawah ini :

http://localhost:8080/profil-siswa

http://localhost:8080/profil-siswa

akan mengakses method profil di controller Siswa, nah jika anda ingin membuat hal seperti ini, anda perlu menggunakan Routing

Caranya silahkan buka file Routes.php didalam folder app/Config/Routes.php, lalu tambahkan routing baru, perintahnya adalah sebagai berikut :

$routes->get('/profil-siswa', 'Siswa::profil');

$routes->get('/profil-siswa', 'Siswa::profil');

tuliskan perintah diatas dibawah perintah routing :

$routes->get('/', 'Home::index');

$routes->get('/', 'Home::index');

Setelah itu kita coba mengakses URL berikut ini, jangan lupa menjalankan local development server dulu ya, dengan perintah php spark serve :

http://localhost:8080/profil-siswa

http://localhost:8080/profil-siswa

hasilnya akan menampilkan tulisan seperti berikut ini :

Kenapa uri segmen tidak berfungsi

Penjelasan :

kita analisa routing yang kita buat ya, coba perhatikan

$routes->get('/profil-siswa', 'Siswa::profil');

$routes->get('/profil-siswa', 'Siswa::profil');

perintah routing diatas memiliki arti :

  • ketika pengguna aplikasi mengakses url profil-siswa, jadi kalau dicontohkan dalam hal ini adalah localhost:8080/profil-siswa, dengan menggunakan method GET artinya kita menuliskan di URL Browser
  • maka akan mengakses method profil di Controller Siswa, sehinga akan menampilkan tulisan “Ini adalah method profil di controller Siswa”, seperti yang tertulis pada method profil di controller Siswa.

Mengatur Route Name

Berikutnya kita akan membahas mengenai route name, route name adalah fitur untuk memberikan nama terhadap routing yang kita buat.

sebagai contoh kita akan memberikan nama pada routing yang barusan kita buat dengan nama profil, maka kita perlu merubah perintah routing menjadi seperti berikut ini :

$routes->get('/profil-siswa', 'Siswa::profil', ['as' => 'profil']);

$routes->get('/profil-siswa', 'Siswa::profil', ['as' => 'profil']);

Keterangan :

  • kita menambahkan perintah [‘as’]=>’profil’ yang artinya routing ini kita berikan nama profil.

baik setelah kita memberikan nama pada routing tersebut, lalu apa fungsi ?

dengan anda memberikan nama terhadap routing, anda bisa mengakses routing menggunakan Link, sebagai contoh kita akan membuat link yang mengakses routing dengan nama profil tersebut, sebagai contoh linknya akan kita letakkan di method index di controller Siswa.

ubah code controller Siswa menjadi seperti berikut ini :

<?php namespace App\Controllers; class Siswa extends BaseController { public function index() { echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>"; } public function profil() { echo 'Ini adalah method profil di controller Siswa'; } }

<?php

namespace App\Controllers;

class Siswa extends BaseController

{

public function index()

{

echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>";

}

public function profil()

{

echo 'Ini adalah method profil di controller Siswa';

}

}

Berikutnya kita coba mengakses URL sebagai berikut ini :

http://localhost:8080/siswa

http://localhost:8080/siswa

maka akan ada link dengan tulisan “Link ke routing profil“, silahkan klik link tersebut

Kenapa uri segmen tidak berfungsi

maka anda akan diarahkan ke URL

http://localhost:8080/profil-siswa

http://localhost:8080/profil-siswa

Hal tersebut karena pada link tersebut kita mengakses routing dengan nama profil, perintahnya seperti pada line 9 controller Siswa :

echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>";

echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>";

kita bisa menggunakan function route_to(‘nama routing’) lalu dibagian parameter tuliskan nama routing, dalam contoh ini kita tuliskan profil, sehingga ketika klik link itu, akan mengakses routing dengan profil, yang akan mengakses url : http://localhost:8080/profil-siswa.

Membuat Closure di Routing

Berikutnya kita akan membahas cara membuat closure di routing, jadi kita bisa membuat function yang berisi perintah php, dimana akan dijalankan ketika routing diakses, sebagai contoh kita akan menambahkan routing dengan nama coba, silahkan buka file routing didalam folder : app/Config/Routes.php

berikutnya tambahkan code seperti berikut ini dibagian routing.

$routes->get('/coba', function () { echo "Ini adalah route coba"; });

$routes->get('/coba', function () {

echo "Ini adalah route coba";

});

Berikutnya kita akan mengakses route coba tersebut, jangan lupa menjalankan local development server dengan perintah :

php spark serve

maka hasilnya adalah sebagai berikut ini :

Kenapa uri segmen tidak berfungsi

Keterangan :

akan menampilkan tulisan “Ini adalah route coba“, hal ini karena kita menuliskan closure didalam route coba, dimana didalam function tersebut kita menggunakan perintah echo untuk menampilkan text “Ini adalah route coba”

Membuat Placeholder di Routing

Berikutnya kita akan belajar bagaimana cara membuat placeholder di routing, secara sederhana placeholder berfungsi untuk menambahkan parameter di bagian routing, parameter ini nantinya dapat digunakan dibagian method di controller.

selain dapat menambahkan parameter, anda juga dapat menentukan jenis data yang dikirimkan melalui parameter tersebut, apakah berbentuk angka, atau huruf, atau dapat berupa bentuk data lainnya, sehingga anda dapat mengatur value parameter yang dikirimkan nantinya.

Untuk dokumentasi resmi dari codeigniter 4, bisa anda lihat melalui alamat sebagai berikut : https://codeigniter.com/user_guide/incoming/routing.html?highlight=route#placeholders

Sebagai contoh kita akan membuat method baru didalam controller Siswa, method baru kita beri nama dataSiswa, sehingga kurang lebih controller Siswa menjadi seperti berikut ini :

<?php namespace App\Controllers; class Siswa extends BaseController { public function index() { echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>"; } public function profil() { echo 'Ini adalah method profil di controller Siswa'; } public function dataSiswa($nama, $usia) { echo "Nama Siswa Adalah $nama, usia $usia"; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?php

namespace App\Controllers;

class Siswa extends BaseController

{

public function index()

{

echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>";

}

public function profil()

{

echo 'Ini adalah method profil di controller Siswa';

}

public function dataSiswa($nama, $usia)

{

echo "Nama Siswa Adalah $nama, usia $usia";

}

}

Keterangan :

  • Pada Line 17 – 20 kita tambahkan method dengan nama dataSiswa, method ini memiliki 2 parameter, yaitu nama dan usia, parameter ini nanti nilainya akan kita kirim melalui route.

Berikutnya kita buat routing baru dengan nama data-siswa, yang akan mengakses method dataSiswa didalam controller Siswa.

Silahkan buka file app/Config/Routes.php

lalu tambahkan perintah routing dibawah ini :

$routes->get('data-siswa/(:alpha)/(:num)', 'Siswa::dataSiswa/$1/$2');

$routes->get('data-siswa/(:alpha)/(:num)', 'Siswa::dataSiswa/$1/$2');

Baik kita coba mengaksesnya dulu ya, setelah itu kita akan bahas apa arti perintah routing diatas, jalankan local development server dengan perintah php spark serve

lalu akses URL : localhost:8080/data-siswa/taufik/17

Hasilnya adalah sebagia berikut :

Kenapa uri segmen tidak berfungsi

Keterangan :

Kita bahas terlebih dahulu dibagian perintah routing.

$routes->get('data-siswa/(:alpha)/(:num)', 'Siswa::dataSiswa/$1/$2');

$routes->get('data-siswa/(:alpha)/(:num)', 'Siswa::dataSiswa/$1/$2');

routing tersebut, kita berikan URL data-siswa, dimana akan mengakses method dataSiswa didalam Controller Siswa

tidak hanya itu, disitu kita berikan 2 parameter, dimana parameter yang dikirimkan melalui URL ini akan dijadikan nilai parameter pada method dataSiswa pada Controller Siswa

berikutnya perhatikan dibagian routing kita menyebutkan jenis parameter (placeholder) pertama adalah (:alpha) yang artinya nilainya harus berupa huruf, dan dibagian parameter kedua (placeholder) adalah (:num) yang artinya nilainya harus berupa angka,

pada dokumentasi dari codeigniter 4, terdapat beberapa jenis placeholder yang dapat digunakan :

  • (:any) digunakan untuk menangkap seluruh jenis inputan
  • (:segment) digunakan untuk menangkap seluruh jenis inputan kecuali forward slash (/)
  • (:num) digunakan untuk menangkap angka
  • (:alpha) digunakan untuk menangkap data berupa huruf
  • (:alphanum) digunakan untuk menangkap data berupa huruf dan angka
  • (:hash) memiliki konsep yang sama dengna segment hanya saja.. ini lebih mudah digunakan jika ketika id pada routing menggunakan hash

sehingga saat anda mengakses URL localhost:8080/data-siswa/taufik/17 maka akan menampilkan text :

Nama Siswa Adalah taufik, usia 17

karena 2 paremeter tersebut taufik dan 17, akan dikirimkan kedalam method dataSiswa didalam controller Siswa, sehingga akan menampilkan tulisan “Nama Siswa Adalah taufik, usia 17”

nah seperti penjelasan sebelumnya placeholder parameter pertama adalah (:alpha) yang artinya harus berupa huruf, dan placeholder parameter kedua adalah (:num) yang artinya harus berupa angka, nah sekarang bagaimana kalau kita melanggar aturan itu ?, parameter pertama akan kita isi dengan angka, dan parameter kedua akan kita isi dengan huruf, contohnya URL berikut ini :

localhost:8080/data-siswa/17/taufik

maka hasilnya adalah sebagai berikut :

Kenapa uri segmen tidak berfungsi

maka akan menampilkan pesan error, karena kita melanggar aturan tipe placeholder saat mengakses routing data-siswa.

Membuat Multiple Routing

Berikutnya kita akan belajar cara membuat multiple routing atau bisa dikatakan routing dengan nama yang sama, tetapi kita bedakan tipe placeholdernya, sehingga codeigniter akan mendeteksi tipe placeholder yang seperti apa yang digunakan, yang akan menentukan method mana yang akan diakses.

dalam contoh ini kita akan buat 2 routing dengan nama “get-siswa” hanya saja kita bedakan dibagian placeholdernya :

  1. routing pertama akan menggunakan placeholder (:num) yang artinya parameternya harus berupa angka
  2. routing kedua akan menggunakan placeholder (:alpha) yang artinya parameternya harus berupa huruf

berikutnya kita akan buat 2 method baru didalam controller Siswa yaitu :

  1. method siswaDataId yang akan digunakan untuk memproses saat placeholder berupa (:num)
  2. method siswaDataName yang akan digunakan untuk memproses saat placeholder berupa (:alpha)

Baik kita tambahkan terlebih dahulu untuk 2 parameter tersebut didalam controller Siswa, sehingga Controller Siswa menjadi seperti berikut ini :

<?php namespace App\Controllers; class Siswa extends BaseController { public function index() { echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>"; } public function profil() { echo 'Ini adalah method profil di controller Siswa'; } public function dataSiswa($nama, $usia) { echo "Nama Siswa Adalah $nama, usia $usia"; } public function siswaDataId($id) { echo "Ini adalah method dengan nama siswaDataId dengan ID $id"; } public function siswaDataName($name) { echo "Ini adalah method dengan nama siswaDataName dengan Name $name"; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<?php

namespace App\Controllers;

class Siswa extends BaseController

{

public function index()

{

echo "Halo ini adalah controller Siswa <a href='" . route_to('profil') . "'>Link ke routing profil</a>";

}

public function profil()

{

echo 'Ini adalah method profil di controller Siswa';

}

public function dataSiswa($nama, $usia)

{

echo "Nama Siswa Adalah $nama, usia $usia";

}

public function siswaDataId($id)

{

echo "Ini adalah method dengan nama siswaDataId dengan ID $id";

}

public function siswaDataName($name)

{

echo "Ini adalah method dengan nama siswaDataName dengan Name $name";

}

}

Keterangan :

  • Kita buat Method SiswaDataId dengan 1 parameter dengan nama $id Line 22
  • Kita buat Method SiswaDataName dengan 1 parameter dengan nama $name Line 27

Berikutnya kita akan buat bagian routingnya, silahkan buka file app/Config/Routes.php, lalu tambahkan routing seperti berikut ini :

$routes->get('get-siswa/(:num)', 'Siswa::siswaDataId/$1'); $routes->get('get-siswa/(:alpha)', 'Siswa::siswaDataName/$1');

$routes->get('get-siswa/(:num)', 'Siswa::siswaDataId/$1');

$routes->get('get-siswa/(:alpha)', 'Siswa::siswaDataName/$1');

Keterangan :

kita buat 2 parameter dengan nama yang sama yaitu get-siswa, yang membedakan hanyalah placeholder :

  1. jika dibagian placeholder berupa angka (:num) maka akan mengakses method siswaDataId di controller Siswa
  2. jika placeholder berupa huruf (:alpha) maka akan mengakses method siswaDataName di controller Siswa.

baik kita akan coba untuk mengakses routing tersebut, jangan lupa untuk menjalankan local development server dengan perintah “php spark serve

kita coba mengakses URL : localhost:8080/get-siswa/3

maka yang tampil adalah sebagai berikut :

Kenapa uri segmen tidak berfungsi

maka akan diakses method siswaDataId dengan mengirimkan angka 3 sebagai parameternya, karena dibagian parameter kita menuliskan angka

berikutnya kita coba mengakses URL : localhost/get-siswa/taufik

maka yang tampil adalah sebagai berikut :

Kenapa uri segmen tidak berfungsi

maka akan diakses method siswaDataName dengan mengirimkan string “taufik” sebagai parameternya, karena dibagian parameter kita menuliskan huruf

Membuat Group Route

Berikutnya kita akan membahas mengenai cara membuat group route di codeigniter 4, jadi anda bisa mengelompokkan route yang anda buat.

Contohnya anda akan membuat route seperti berikut ini :

  • www.example.com/admin/users
  • www.example.com/admin/blog

jika dilihat hal tersebut memiliki kesamaan, yaitu bagian admin, sebagai contoh agar anda mudah memahami, kita buat 2 controller dengan users dan blog, 2 controller ini kita simpan didalam folder app/Controllers/Admin

baik silahkan buat dulu folder Admin didalam folder app/Controllers

berikutnya silahkan buat file controller dengan nama Users.php didalam folder admin yang baru saja kita buat.

<?php namespace App\Controllers\Admin; use App\Controllers\BaseController; class Users extends BaseController { public function index() { echo 'Ini adalah halaman Index dari Controller Users didalam folder Admin'; } }

<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;

class Users extends BaseController

{

    public function index()

    {

        echo 'Ini adalah halaman Index dari Controller Users didalam folder Admin';

    }

}

Berikutnya silahkan buat file controller baru dengan nama Blog.php didalam folder admin dengan isi code seperti berikut ini :

<?php namespace App\Controllers\Admin; use App\Controllers\BaseController; class Blog extends BaseController { public function index() { echo 'Ini adalah halaman Index dari Controller Blog didalam folder Admin'; } }

<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;

class Blog extends BaseController

{

    public function index()

    {

        echo 'Ini adalah halaman Index dari Controller Blog didalam folder Admin';

    }

}

Baik kita sudah membuat 2 controller yaitu Users dan Blog didalam folder Admin.

Berikutnya kita akan membuat route group, buka file Routes.php didalam app/Config lalu tambahkan skrip route seperti berikut ini :

$routes->group('admin', function ($routes) { $routes->add('users', 'Admin\Users::index'); $routes->add('blog', 'Admin\Blog::index'); });

$routes->group('admin', function ($routes) {

$routes->add('users', 'Admin\Users::index');

$routes->add('blog', 'Admin\Blog::index');

});

Setelah itu kita akan coba untuk mengaksesnya, jangan lupa jalankan untuk local development servernya :

php spark serve

Berikutnya coba kita mengakses URL berikut ini :

http://localhost:8080/admin/users

http://localhost:8080/admin/users

Maka akan tampil Text

Ini adalah halaman Index dari Controller Users didalam folder Admin

Karena saat kita mengakses URL diatas akan mengakses method index di controller Users, controller Users berada didalam folder admin, seperti apa yang kita tuliskan dibagian route group.

Berikutnya coba kita mengakses URL berikut ini :

http://localhost:8080/admin/blog

http://localhost:8080/admin/blog

Maka akan tampilkan Text

Ini adalah halaman Index dari Controller Blog didalam folder Admin

Ini adalah halaman Index dari Controller Blog didalam folder Admin

Karena saat kita mengakses URL diatas akan mengakses method index di controller Blog, controller Blog berada didalam folder admin, seperti apa yang kita tuliskan dibagian route group.

Jadi kurang lebih seperti itu ya teman – teman beberapa fitur routing yang dapat anda gunakan di Codeigniter 4, untuk pembahasan routing lebih jelasnya bisa melihat di dokumentasi resmi dari Codeigniter 4 :

https://codeigniter4.github.io/userguide/incoming/routing.html

Baik sekian dulu sampai jumpa di tutorial Codeigniter 4 Selanjutnya