Lumen HTTP Middleware

HTTP Middleware adalah mekanisme yang digunakan untuk filtering HTTP Reguest pada system/aplikasi yang kita buat. contoh Lumen menyediakan middleware untuk melakukan proses authenticated jika user tidak memiliki authentication, maka middleware akan melakukan redirect ke halaman login atau jika aplikasi REST maka system akan memberikan response error.

Defining Middleware

Untuk membuat middleware, pada saat pertama kali kita membuat sebuat project dengan composer maka lumen secara default menyediakan class contoh middleware , kita bisa gunakan ini dengan cara mengkopi terlebih dahulu class contoh tersebut. Contoh class terdapat di directory http/middleware/ExampleMiddleware.php .

class ExampleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($request->scope =='admin'){
          return redirect('admin');
        }

        return $next($request);
    }
}

Pada contoh class middleware di atas kita melakukan filtering atau validasi jika scope sama dengan admin, maka user akan di arahkan ke halaman admin.

Registering Middleware

Setelah kita membuat class midlleware maka selanjutnya kita harus mendaftarkan class tersebut agar bisa kita gunakan ada beberapa cara agar middleware yang telah kita buat bisa kita gunakan :

Global Middleware

Jika middleware yang kita buat bisa berjalan atau digunakan pada saat semua request, maka kita bisa mendaftarkan class middleware pada file app.ph yang terletak di directory bootstrap/app.php :

$app->middleware([
    App\Http\Middleware\ExampleMiddleware::class
]);

Assigning Middleware To Routes

Selain secara global kita juga bisa meletakan middleware pada setiap route yang kita buat ini lebih spesifik sesuai dengan yang kita inginkan route mana yang akan kita pasang middleware kita bisa tambahkan pada file php yang terletak di directory bootstrap/app.php :

$app->routeMiddleware([
    'user' => App\Http\Middleware\ExampleMiddleware::class
]);

Selanjutnya kita pasang / gunakan middleware tersebut pada route yang kita buat :

//Single route 
$router->group(['middleware' => 'user'], function () use ($router) {
      $router->get('/employee', ['uses' => 'EmployeeController@getEmployee']);
});


//Multiple middleware 
$router->group(['middleware' => ['user','admin']], function () use ($router) {
      $router->get('/employee', ['uses' => 'EmployeeController@getEmployee']);
});

Middleware Parameters

Middleware bisa juga menerima custom parameters, contoh ketika kita membuat verifikasi terhadap user yang memiliki authenticated ‘role’ untuk melakukan action berikutnya, kita bisa membuat sebiah RoleMiddleware yang akan melakukan validasi role contoh pada class berikut :



class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next,$role)
    {
        if(!$request->user()->hasRole($role)){
           //action
        }

        return $next($request);
    }
}

Middleware spesifik bisa kita gunakan/ tambahkan pada route yang telah kita buat :

$router->group(['middleware' => role:create], function () use ($router) {
      $router->post('/employee', ['uses' => 'EmployeeController@getEmployee']);
});

Terminable Middleware

Sewaktu – waktu kita membutuhkan middleware yang akan bekerja setelah HTTP response terkirim kepada browse atau client. contoh seperit session middleware akan membuat session setelah response berhasil dikirim ke browser/client. untuk membuat terminable middleware kita bisa menambahkan function termiate seperti berikut :



class SessionMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request,$response)
    {
        // Store session
    }

}

Terminate function bisa merima request atau response, ketika kita membuat terminable middleware kita harus menambahkan atau mendaftarkan class tersebut pada file bootstrap/app.php.

Saat memanggil metode terminate pada middleware, Lumen akan membuat fresh instance dari middleware service container. Jika kita ingin menggunakan instance middleware yang sama ketika metode handle dan terminate dipanggil, daftarkan middleware dengan container. menggunakan metode singleton container.

 

References :

  1. https://lumen.laravel.com/

 

hyvercode

Leave a Reply

Your email address will not be published. Required fields are marked *