Hai, Middleware HTTP menyediakan mekanisme yang mudah untuk memfilter permintaan HTTP yang memasuki aplikasi Anda. Misalnya, Lumen menyertakan middleware yang memverifikasi bahwa pengguna aplikasi Anda diautentikasi. Jika pengguna tidak diautentikasi, middleware akan mengarahkan pengguna ke layar login. Namun, jika pengguna diautentikasi, middleware akan mengizinkan permintaan untuk melanjutkan lebih jauh ke dalam aplikasi.
Lokasi Codingan middleware ada di App/Http/Middleware
Untuk membuat middleware baru, salin ExampleMiddleware
yang disertakan dengan aplikasi Lumen default.

Rubah function handle dengan codingan berikut ini:
public function handle($request, Closure $next)
{
if ($request->input('umur') <= 200) {
return redirect('dashboard');
}
return $next($request);
}
Maksudnya adalah untuk memvalidasi jika umur <= 200 maka redirect ke dashboard. Jadi kita bisa Membayangkan middleware sebagai rangkaian permintaan layer HTTP yang harus dilalui sebelum masuk ke aplikasi Kita. Setiap lapisan dapat memeriksa permintaan dan bahkan menolaknya seluruhnya.
Middleware berkaitan dengan Before & After
Middleware pada laravel dapat digolongkan kedalam dua kelompok yaitu After Middleware
dan Before Middleware
. After Middleware
merupakan Middleware yang diproses setelah request masuk kedalam Controller, sedangkan Before Middlware
merupakan Middleware yang diproses sebelum request masuk kedalam Controller.
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Logic kamu ditaro disini ya bro
return $next($request)
}
}
Untuk After bisa menggunakan kode
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Logic kamu ditaro disini ya bro
return $response
}
}
IMPLEMENTASI BEFORE MIDDLEWARE
Biasanya kita gunakan untuk cek role
public function handle($request, Closure $next)
{
$user = Auth::user();
if($user->role === User::ROLE_ADMIN) {
return $next($request);
}
return redirect('home');
}
IMPLEMENTASI AFTER MIDDLEWARE
Biasanya kita gunakan untuk menyimpan log request ke database
public function handle($request, Closure $next)
{
$response = $next($request);
// menyimpan IP dan path yang telah diakses ke database
DB::table('access_logs')->insert([
'path' => $request->path(),
'ip' => $request->getClientIp(),
'created_at' => new DateTime,
'updated_at' => new DateTime
]);
return $response
}
Daftarkan middleware kita ke app/Http/Kernel.php
protected $middleware = [
...
\App\Http\Middleware\PunyaKamuMiddleware::class, //New middleware
];
Masih di file yang sama, kita daftarkan di route
protected $routeMiddleware = [
...
'new-middlware' => \App\Http\Middleware\PunyaKamuMiddleware::class, //New middleware
];
Bagaimana jika satu route membutuhkan banyak middleware? kan repot memanggil banyak middleware sekaligus. Solusinya ialah diregistrasikan menggunakan Middleware Groups.
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
Adakalanya kita tetap butuh sebuah aksi ketika response telah diberikan kepada User, baik menggunakan Before Middleware maupun After Middleware.
Masukkan code berikut pada middleware after & before
public function terminate($request, $response)
{
//Gunakan function ini untuk logic save ke log
}
Oke sampai disini ya untuk konfigurasi middlewarenya, jangan lupa jika kita menggunakan App Engine maka kita harus deploy dengan script: gcloud app deploy --no-cache --project lidproject --version versiprojectanda