[TIPS] Membuat Routing Maintenable di Laravel 6

[TIPS] Membuat Routing Maintenable di Laravel 6

Pendahuluan

Satu dari sekian hal yang menjadi problematika Programmer adalah bagaimana cara menuliskan code yang maintenable, sebab aplikasi yang terus dikembangkan dari waktu ke waktu akan menemukan kompleksitasnya sendiri. Sehingga ramai istilah ataupun kalimat yang mengatakan bahwa "jangan menuliskan code yang hanya kamu dan Tuhan yang tahu".

Tanpa terasa (*bukan semua orang tidak menyadari) bahwa code yang kita tuliskan dari line per line akan menemukan sebuah titik menjadi tumpukan code yang menyulitkan untuk ditelusuri, salah satunya adalah routing yang semakin menumpuk pada Laravel.

Pada artikel ini kita akan belajar bersama bagaimana mengelola routing tersebut berdasarkan kelompoknya masing-masing.

Baca Juga: [Tips] 5 HTML Tag Yang Harus Dipertimbangkan Untuk Digunakan

Mengelompokkan Routing Laravel

Pengembang Laravel secara sadar bahwa masalah ini akan ditemukan suatu saat, sehingga dibuatlah berbagai macam option dalam mendefinisikan route. Salah satu contohnya adalah penggunanan Route::resource() untuk merangkum 6 baris code routing menjadi sebaris code saja.

Penumpukan code tidak bisa dihindari jika aplikasi tersebut sudah semakin dewasa, maka opsi lain yang bisa kita lakukan adalah dengan mengelompokkan routing tersebut ke beberapa file berdasarkan kelompoknya masing-masing. Misalnya saja akan kita kelompokkan menjadi backend dan frontend dimana backend akan diawali dengan prefix /administrator dan frontend akan diawali dengan prefix /member, sedangkan code yang bersifat umum akan disimpan didalam file route bawaan Laravel. Schema diatas hanya contoh saja bagaimana cara mengimplementasikan yang diinginkan.

Memulai semua ini dengan project baru, install Laravel terbaru dalam hal ini versi 6.x dengan command

composer create-project --prefer-dist laravel/laravel routing-improve

Secara default, Laravel menyediakan dua buah route yakni routes/web.php dan routes/api.php. Kemudian kita akan membuat dua buah file lainnya yang akan meng-handle routing backend dan frontend dengan prefix url-nya masing-masing.

Buat file web.php di dalam folder routes/backend dan juga file web.php di dalam folder routes/frontend, adapun gambaran strukturnya seperti gambar dibawah ini.

Kemudian buka file routes/backend/web.php dan masukkan beberapa route dibawah ini & karena hanya sebagai contoh saja maka kita gunakan closure route.

<?php

Route::get('category-1', function() {
    return 'category-1';
});

Route::get('category-2', function() {
    return 'category-2';
});

Route::get('category-3', function() {
    return 'category-3';
});

Route::get('category-4', function() {
    return 'category-4';
});

Selanjutnya buka file routes/frontend/web.php dan tambahkan code berikut

<?php

Route::get('product-1', function() {
    return 'product-1';
});

Route::get('product-2', function() {
    return 'product-2';
});

Route::get('product-3', function() {
    return 'product-3';
});

Route::get('product-4', function() {
    return 'product-4';
});

Sampai pada tahap ini sudah bisa digunakan belum? Jawabannya adalah belum, karena kita belum menginformasikan pada sistem Laravel bahwa terdapat file route baru. Informasi ini dikontrol oleh RouteServiceProvider.php yang berada di dalam folder app/Providers. Buka file tersebut dan tambahkan kedua fungsi berikut

//FUNGSI INI UNTUK MENGHANDLE ROUTE BACKEND
protected function mapBackendRoutes()
{
    //MIDDLEWA YANG DIGUNAKAN KITA SAMAKAN SAJA DENGAN ROUTE DEFAULT WEB.PHP YANG AKAN MENGGUNAKAN MIDDLEWARE ROUTE
    //KARENA FUNGSINYA SAMA HANYA SAJA DIPISAHKAN FILENYA
    Route::middleware('web')
        //BAGIAN YANG BERBEDA HANYA PENAMBAHAN PREFIX ADMINISTRATOR
        //DIMANA ROUTE YANG ADA DIDALAM FILE /BACKEND/WEB.PHP
        //URLNYA AKAN DIMULAI DENGAN /ADMINISTRATOR
        ->prefix('administrator')
        ->namespace($this->namespace)
        //ARAHKAN KE FILE YANG DITUJU, YAKNI ROUTES/BACKEND/WEB.PHP
        ->group(base_path('routes/backend/web.php'));
}

//FUNGSI INI AKAN MENGHANDLE ROUTE FRONTEND
//ADAPUN PENJELASANNYA SAMA SAJA
protected function mapFrontendRoutes()
{
    Route::middleware('web')
        ->prefix('member')
        ->namespace($this->namespace)
        ->group(base_path('routes/frontend/web.php'));
}

Eits, jangan terburu-buru karena pada tahap ini masih belum bisa digunakan karena kita hanya membuat fungsinya tapi belum me-register fungsi tersebut. Di dalam file yang sama yakni RouteServiceProvider, modifikasi method map() menjadi.

public function map()
{
    $this->mapApiRoutes();

    $this->mapWebRoutes();

    //PANGGIL FUNGSI YANG SUDAH DIBUAT SEBELUMNYA
    $this->mapBackendRoutes();
    $this->mapFrontendRoutes();
  
    //JIKA ADA ROUTE BARU PANGGIL FUNGSINYA PADA METHOD INI
}

Jadi schema-nya sederhana karena hanya beberapa step

  1. Buat file route yang baru.
  2. Buat method yang memanggil file route tersebut.
  3. Register method tersebut di dalam method map().

Apabila kita testing, maka kita sudah bisa mengakses halaman dengan url http://localhost:8000/administrator/category-1 atau http://localhost:8000/member/product-1 dan route lainnya.

Category:
Share:

Comments