Router adalah kode yang bekerja di pertengahan request / response. Ketika sebuah request dikirim, router akan mencocokkan request yang diterima dengan response yang sesuai. Jika ditemukan response yang sesuai, request dianggap valid, lalu diarahkan ke action tertentu. Sebagai contoh, saat ada request untuk API https://variancode.com/api/v1/gambar, router akan mencocokkan request tersebut dengan controller yang tersedia. Jika valid, maka request diteruskan ke controller Gambar (misal). Apabila tidak ada satupun yang cocok, API akan merespon request tersebut dengan HTTP status code 404.

Membuat Router di File web.php

Routing (menggunakan router) pada Lumen secara default dilakukan di file web.php yang berada di path routes/web.php. Isi file web.php (versi 6) pertama kali setelah instalasi adalah :

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/

$router->get('/', function () use ($router) {
    return $router->app->version();
});

Penjelasan dari route di atas, ketika URL http://localhost dibuka pada browser, maka Lumen akan mengarahkan request ke router $router->get('/'). Karena request ke halaman index get('/') terdaftar di route web.php, Lumen dapat merespon request tersebut dengan mengembalikan (return) nilai berupa versi Lumen yang digunakan melalui $router->app->version().

Sekarang, tambahkan dua router lain di file web.php, masing-masing hello dan welcome :

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
*/

$router->get('/', function () use ($router) {

    return $router->app->version();

});

$router->get('/hello', function () use ($router) {

    return "Halo Apa Kabar - Variancode";

});

$router->get('/welcome', function () use ($router) {

    echo "Selamat Datang - Variancode";

});

Hasilnya dapat dilihat pada gambar di bawah. Request ke URL /, /hello dan /welcome menghasilkan HTTP Status Code 200, sedangkan /haha dan /loh menghasilkan HTTP Status Code 404 (Not Found) karena tidak terdaftar di route web.php.

menggunakan router dan controller di lumen laravel

Membuat Controller

Di contoh sebelumnya, kita masih menggunakan anonymous function untuk routing. Dalam pemrograman PHP, fungsi anonim atau tanpa nama disebut sebagai Clossure. Sayangnya, penggunaan clossure ini tidak fleksibel karena hanya cocok untuk business logic sederhana. Pada aplikasi besar yang melibatkan business logic kompleks, kita membutuhkan Controller.

Berikut adalah format penulisan controller “yang paling dasar” pada Lumen :

<?php

namespace App\Http\Controllers;

class NamaController extends Controller {

    public function namaMethod() {

        return "sebuah nilai";

    }

}

Controller juga dapat dibuat di dalam child folder app/Http/Controllers/, cara penulisannya sedikit berubah menjadi :

<?php

namespace App\Http\Controllers\NamaFolder;

use App\Http\Controllers\Controller;

class NamaController extends Controller {

    public function namaMethod() {

        return "sebuah nilai";

    }

}

Catatan : penulisan nama class wajib menyertakan extends Controller, oleh karena itu file Controller.php yang ada di dalam folder app/Http/Controllers/ jangan sampai terhapus!!

menggunakan router dan controller di lumen laravel

Menggunakan Router dan Controller

Buat class bernama SalamController.php di folder app/Http/Controllers/ :

<?php

namespace App\Http\Controllers;

class SalamController extends Controller {

    public function salam() {

        return "Salam - Semangat Pagi Indonesia!!!";

    }

}

Buat class bernama SalamController.php kembali, tapi di dalam folder app/Http/Controllers/Olahraga/ :

<?php

namespace App\Http\Controllers\Olahraga;

use App\Http\Controllers\Controller;

class SalamController extends Controller {

    public function salam() {

        return "Salam Olahraga - Garuda di Dadaku!!!";

    }

}

Agar lebih jelas, peletakan kedua file SalamController.php dapat dicocokkan dengan struktur projek pada gambar berikut :

menggunakan router dan controller di lumen laravel

Terakhir, tambahkan dua router di bawah ke file web.php :

// Router Salam-Pertama

$router->get('/salam', 'SalamController@salam');

// Router Salam-Kedua

$router->group(['namespace' => 'OlahRaga', 'prefix' => 'olahraga'], function() use ($router) {
	
	$router->get('/salam', 'SalamController@salam');

});

Router Salam-Pertama akan membaca HTTP Request jenis GET yang masuk melalui URL /salam. Bila request valid, Lumen akan meneruskan request ke function salam() yang ada di file SalamController.php.

Router Salam-Kedua akan membaca HTTP Request jenis GET yang masuk melalui URL /olahraga/salam, ditandai dengan 'prefix' => 'olahraga'. Request kemudian diteruskan ke function salam() file SalamController.php di folder app/Http/Controllers/Olahraga/ yang diwakili oleh 'namespace' => 'OlahRaga'. Router Salam-Kedua harus diletakkan di dalam middleware group $router->group agar kita dapat mendefinisikan nilai untuk 'namespace' dan 'prefix'.

Hasil akhir routing URL /salam dan /olahraga/salam dapat dilihat pada gambar di bawah :

menggunakan router dan controller di lumen laravel