Rabu, 24 Maret 2021

Cara membagi file route pada laravel 8 (route mapping)

 Mmmm kayakya judulnya agak aneh,, tapi disini saya mau menginfokan bahwa file route tidak hanya di folder routes dan web.php,, akan tetapi bisa di bagi-bagi sesuai prefix yang digunakan,

Jadi misalkan route kita seperti ini :

admin/permission

admin/user

admin/role

transaksi/penjualan

transaksi/pembelian

report/penjualan

report/pembelian

Terlihat kita bisa membagi file route kedalam 3 file, yaitu file admin.php, transaksi.php dan report.php

Letak konfigurasi file web.php ada di  App/Providers/RouteServiceProvider.php berikut contoh file tersebut 

 public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

Jadi apabila ubah nama web.php menjadi default.php dan kita merubah settingan diatas yang semula 'routes/web.php' menjadi 'routes/default.php' maka aplikasi kita dapat berjalan dengan normal.

So agar menjadi rapi maka saya biasanya membuat folder web dan merename web.php menjadi default.php dan men-cut file default.php ke dalam folder web. Sehingga file RoutesServiceProvider.php saya rubah seperti ini ;

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web/default.php'));

Okkay setelah saya rubah seperti itu mestinya aplikasi berjalan seperti biasa.

Setelah itu saya membagi file sesuai dengan prefix dan menambahkan seperti ini


            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web/default.php'));

            Route::middleware('web''has.role')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));

            Route::middleware('web''has.role')
                ->namespace($this->namespace)
                ->prefix('master')
                ->group(base_path('routes/web/master.php'));

            Route::middleware('web''has.role')
                ->namespace($this->namespace)
                ->prefix('trans')
                ->group(base_path('routes/web/trans.php'));

            Route::middleware('web''has.role')
                ->namespace($this->namespace)
                ->prefix('report')
                ->group(base_path('routes/web/report.php'));

Hilangkan 'has.role' bila halaman yg di akses tidak perlu login

Dan bisa di tebak sekarang didalam folder web terdapat file-file seperti ini :


So sekarang kita bisa membagi-bagi route ke masing-masing folder, contoh untuk prefix account, maka isi didalam file account.php seperti ini :

<?php

use App\Http\Controllers\Account\ChangePasswordController;
use App\Http\Controllers\Account\EditProfileController;
use App\Http\Controllers\Account\ProfileController;
use Illuminate\Support\Facades\Route;


Route::middleware('auth')->group(function () {
    Route::get('profile',  ProfileController::class)->name('profile');
    Route::get('change-password',  [ChangePasswordController::class'index'])->name('password');
    Route::get('edit-profile',  [EditProfileController::class'index'])->name('edit.profile');
    Route::put('{id}/edit', [EditProfileController::class'update'])->name('update.profile');
    Route::put('{id}/edit-password', [ChangePasswordController::class'update'])->name('update.password');
    //     });
});

Hilangkan middleware('auth') jika halaman yg di akses tidak perlu login

Maka kita tidak perlu mendefinisikan group prefix lagi disini karena sudah dibagi sebelumnya di file RouteServiceProvider.

Sekian tutorial saya,, semoga bermanfaat.


Tidak ada komentar:

Posting Komentar