Last Updated on December 2, 2021 by
Pernahkah Anda mendengar nama komponen middleware saat membaca referensi mengembangkan website atau aplikasi? Middleware adalah salah satu elemen penting yang sering digunakan dalam proses ngoding. Alhasil, mengetahui apa itu Middleware adalah hal yang penting agar proses ngoding Anda menjadi semakin mudah.
Kabar gembiranya, artikel seri belajar Laravel kali ini akan mengupas tuntas persoalan Middleware khusus untuk Anda. Sudah penasaran? Yuk langsung saja kita simak pembahasannya berikut ini. Selamat membaca!
Table of Contents
Apa Itu Middleware Laravel? Definisi, Peranan dan Manfaat
Middleware adalah nama yang sudah tidak asing lagi para web programmer. Apa itu Middleware? Dalam dunia programming, Middleware adalah sebuah software layer. Sesuai namanya ‘middle’ yang berarti tengah, maka letak Middleware adalah berada di tengah antara controller dan router.
Ada pula yang mengartikan Middleware adalah software yang menengahi sebuah aplikasi dengan yang lain. Dengan begini, proses integrasi antar aplikasi dapat berjalan dengan lebih mudah.
Posisi middleware yang berada di tengah ini bukanlah tanpa sebab. Dalam proses pembuatan produk-produk software (aplikasi, website maupun web app), sering kita diwajibkan dengan tugas membuat filter yang mampu memverifikasi keaslian request yang masuk.
Filter dan verifikasi ini berguna untuk mengecek beragam status dari request seperti status login, token Cross Site Request Forgery (CSRF), dan privillage request. Pun Middleware adalah komponen yang dipercayakan untuk mengemban tugas-tugas tersebut.
Middleware dimiliki oleh banyak framework, termasuk Laravel. Kemunculan Middleware Laravel adalah pada Laravel 5. Biasanya, Middleware Laravel adalah komponen utama yang digunakan untuk melakukan proses autentikasi (authentication). Sebenarnya terdapat beberapa fungsi umum dari Middleware dalam dunia programming. Fungsi-fungsi Middleware secara umum adalah:
- Authentication (seperti pada Laravel).
- Validasi input.
- Authorization.
- Data logger.
- Sanitasi input.
- Meresponse handler, dan lain sebagainya.
Middleware Laravel adalah komponen yang bertugas mengecek apakah user sudah mempunyai hak mengakses web atau belum. Pun Middleware Laravel adalah sebuah class khusus yang menengahi Controller tujuan dengan request masuk.
Middleware juga membantu meringankan beban kerja Controller, sebab, Controller dapat berfokus untuk bekerja mengurus logika alur bisnis dari flow saja. Controller tidak perlu mengurus hal-hal di luar proses flow seperti memvalidasi request masuk – itu semua adalah pekerjaan Middleware.
Apa keuntungan memakai Middleware? Keuntungan Middleware adalah memastikan setiap input sudah bersih dan cocok dengan alur flow aplikasi atau website, sehingga akan lebih mudah untuk diproses Controller. Selain itu, code aplikasi dan website Anda akan menjadi lebih tahan lama, mudah dipelihara (maintainable), mudah terbaca dan dapat digunakan berulang kali (reusable).
Seperti Apa Cara Kerja Middleware Laravel?
Kira-kira bagaimana cara kerja Middleware Laravel untuk memproses autentikasi request? Sederhananya, cara kerja Middleware Laravel mirip sebagai ‘satpam’ yang mengecek setiap orang sebelum memasuki suatu gedung. Middleware akan mencegat request masuk, memproses dan memvalidasinya terlebih dahulu, kemudian menyalurkan request tersebut ke Controller tujuan atau Controller lain.
Laravel punya 3 jenis Middleware yang bisa digunakan untuk menjalankan proses di atas. Ketiga jenis Middleware Laravel adalah: RedirectIfAuthenticated.php, VerifyCsrfToken.php dan Authenticate.php. Kesemua token tersimpan dalam folder direktori app/Http/Middleware di Laravel.
Setiap fungsi Middleware Laravel mempunyai method khusus bernama handle(). Method pada Middleware Laravel inilah yang akan dipanggil otomatis ketika developer meregistrasikan middleware. Method ini pun terbagi lagi mempunyai 2 jenis parameter yakni Closure $next dan Illuminate\Http\Request $request.
Seperti pada contoh pengaplikasian Middleware Laravel berikut ini. Untuk menambahkan Middleware ke program, Anda cukup membuat kelas baru di Laravel dengan format code:
<?php
namespace App\Http\Middleware;
use Closure;
class MyMiddleware
{
public function handle($request, Closure $next)
{
//input coding di sini...
}
}
Kemudian, method handle() berguna untuk memfilter setiap jenis request yang masuk agar tujuan di Controller hanya bisa dijangkau oleh user yang memiliki akses role admin atau admin. Namun agar bisa digunakan, Anda harus mendefinisikan method handle () terlebih dahulu dengan contoh code:
public function handle($request, Closure $next)
{
$user = Auth::user();
if($user->role === User::ROLE_ADMIN) {
return $next($request);
}
return redirect('home');
}
Pada kode di atas, apabila diaplikasikan, maka akan terjadi proses mengecek role user yang sedang login kala itu. Jika Middleware mendeteksi user mempunyai role admin, maka ia akan meneruskan request ke Controller tujuan memakai method $next($request). Jika request tidak punya role admin, Middleware akan otomatis mengembalikannya ke home. Praktis bukan menggunakan Middleware untuk mengecek setiap request?
3 Cara Meregistrasi Middleware pada Laravel
Terdapat 3 cara praktek meregistrasi Middleware pada framework Laravel. Ketiga cara tersebut adalah meregistrasi Middleware secara global, registrasi pada controller, dan registrasi pada routes.
Registrasi Middleware Global
Untuk meregistrasi Middleware secara global, Anda cukup menambahkan Middleware pada file app/Http/Kernel.php saja. Setiap Middleware bisa diregistrasi secara global. Hasilnya, Middleware akan selalu dipanggil kapanpun ada request masuk ke sistem.
Contoh code untuk registrasi Middleware global di Laravel:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\MyGlobalMiddleware::class, //input code Middlware baru Anda di sini
];
Registrasi Middleware Controller
Selanjutnya adalah meregistrasi Middleware secara spesifik di Controller agar fungsinya berlaku pada setiap method yang ada di Controller. Berbeda dengan fungsi global, Middleware yang diregistrasi pada Controller dapat dikustomisasi pengaturannya agar bekerja secara spesifik pada method-method tertentu saja. Ada juga beberapa method di Controller yang bisa Anda kecualikan, lho, jika memang dirasa tidak perlu untuk disematkan Middleware.
Contoh code untuk registrasi Middleware Controller di Laravel:
class MyController extends Controller
{
function __construct()
{
$this->middleware('my-middleware');
$this->middleware('log-middleware', ['only' => ['foo', 'bar']]); //selected method
$this->middleware('subscribe-middleware', ['except' => ['baz']]) ; //exclude method
}
}
Registrasi Middleware Routes
Terakhir adalah cara meregistrasi Middleware pada routes. Menambahkan Middleware ke Routes juga sama seperti global – Anda bisa melakukannya semudah menambahkan Middleware baru ke file app/Http/Kernel.php. Terdapat 2 tahap dalam meregistrasi Middleware ke Routes, yakni melakukan registrasi dan mendefinisikan routes yang akan dipakai Middleware.
Anda bisa meregistrasi Middleware dengan contoh code:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,
'oauth' => \Example\OAuth2Server\Middleware\OAuthMiddleware::class,
'oauth-owner' => \Example\OAuth2Server\Middleware\OAuthOwnerMiddleware::class,
'my-middlware' => \App\Http\Middleware\MyGlobalMiddleware::class, //input Middlware Anda di sini
];
Kemudian, lanjutkan proses dengan menambahkan key middleware agar sistem Laravel bisa membedakan Routes mana saja yang memakai Middleware dan mana yang tidak. Key middleware ini ditambahkan pada file app/Http/routes.php khususnya di route options. Contoh code:
Route::get('admin', [
'uses' => 'AdminController@index',
'middleware' => 'my-middleware'
]);
Bonus: Before & After Middleware Laravel
Terakhir, kita akan melihat dua kelompok besar Middleware Laravel, yakni Before Middleware dan After Middleware. Apa itu dan apa saja perbedaan masing-masing?
Before dan after Middleware adalah kedua fungsi yang selalu berdampingan. Before Middleware adalah proses request sebelum masuk ke Controller, sementara after Middleware adalah proses request pasca masuk Controller. Anda bisa membuat definisi kedua tipe Middleware. Contoh coding before Middleware adalah:
<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
//input tindakan untuk setiap request yang diterima sebelum ke Controller
return $next($request)
}
}
Sementara after Middleware memproses response (hasil) dari Controller yang diperoleh setelah proses before Middleware. Response tersebut akan diproses lagi untuk mendapatkan hasil baru yang dikirim ke web browser dan mengalami proses render. Contoh coding after Middleware adalah:
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
//input tindakan terhadap response yang sudah diperoleh
return $response
}
}
Demikianlah artikel seri belajar Laravel pemula tentang Middleware. Menarik sekali artikel edisi kali ini, bukan? Semoga artikel seri belajar Laravel pemula kali ini bisa menambah wawasan dan pengetahuan Anda seputar Laravel, ya! Selamat mencoba berpraktek menjalankan Laravel.
Jangan lupa untuk menemukan lebih banyak artikel seri belajar Laravel pemula lainnya beserta artikel tentang IT lainnya hanya dari Appkey.id. Sayonara!
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.