Slim Framework 3: Middleware

slim-logoMari kita lanjutkan belajarnya, kali ini saya akan membahas middleware pada Slim Framework 3. Middleware digunakan untuk menjalankan kode sebelum dan sesudah aplikasi yang kita buat, untuk memanipulasi request dan response objek sesuai keinginan kita. Middleware membantu melakukan filter setiap request yang masuk ke dalam aplikasi. Hal ini dilakukan dengan tujuan untuk melakukan proses verifikasi terhadap setiap request yang masuk seperti misalnya melakukan pengecekan status login, privilege, otentikasi request sebelum aplikasi dijalankan, atau bahkan melakukan pengecekan token CSRF (Cross-Site Request Forgery) untuk memastikan bahwa request yang masuk berasal dari komputer yang valid. Dengan menggunakan Slim Framework 3, kita dapat mengimplementasikan mekanisme tersebut dengan bantuan fitur middleware yang telah disediakan.

Apa itu Middleware?

Berdasarkan dokumentasi resmi dari situs web Slim:

Middleware is a callable that accepts three arguments: a Request object, a Response object, and the next middleware.

Jadi, middleware adalah sebuah variabel / function yang mempunyai tiga argumen:

  • PSR7 request object – \ Psr \ Http \ Message \ ServerRequestInterface
  • PSR7 response object – \ Psr \ Http \ Message \ ResponseInterface
  • Middleware berikutnya

Bagaimana Cara Kerja Middleware?

Framework-framework yang berbeda menggunakan middleware secara berbeda pula. Slim menambahkan middleware sebagai lapisan konsentris yang mengelilingi inti aplikasi Anda. Setiap lapisan middleware baru mengelilingi setiap lapisan middleware yang ada. Struktur konsentris memperluas lahiriah sebagai lapisan yang ditambahkan pada middleware tambahan. Lapisan middleware yang terakhir ditambahkan adalah yang pertama yang akan dijalankan.

Ketika Anda menjalankan aplikasi Slim, objek request dan response melintasi struktur middleware dari luar ke dalam. Mereka pertama kali masuk ke middleware paling terluar, kemudian middleware paling luar berikutnya, dan seterusnya, sampai mereka akhirnya tiba di aplikasi Slim. Setelah kiriman sampai pada aplikasi Slim dengan rute yang tepat, response object yang dihasilkan dari aplikasi Slim keluar dan melintasi struktur middleware dari dalam ke luar.

Berikut adalah diagram yang menggambarkan aliran proses middleware:

middleware

Application Middleware

Aplikasi middleware dipanggil untuk setiap HTTP request yang masuk. Tambahkan aplikasi middleware dengan aplikasi Slim menggunakan method add(). Contoh dapat dilihat di bawah ini (simpan dengan nama middleware.php di direktori slim):

<?php
require "vendor/autoload.php";

$app = new \Slim\App();

$app->add(function ($request, $response, $next) {
    $response->getBody()->write('SEBELUM');
    $response = $next($request, $response);
    $response->getBody()->write('SESUDAH');

    return $response;
});

$app->get('/', function ($request, $response, $args) {
    $response->getBody()->write(' Azuwir ');

    return $response;
});

$app->run();

middleware1

Route Middleware

Route middleware dipanggil hanya jika rutenya cocok dengan metode HTTP request saat ini dan URI. Route middleware ditentukan segera setelah Anda menjalankan setiap metode routing aplikasi Slim (misalnya, get() atau post()). Setiap metode routing yang mengembalikan sebuah instance dari \Slim\Route, dan class ini menyediakan antarmuka middleware yang sama dengan instance aplikasi Slim. Tambahkan middleware ke route dengan metode add(). Contoh dapat dilihat di bawah ini (simpan dengan nama middleware2.php di direktori slim):

<?php
require "vendor/autoload.php";

$app = new \Slim\App();

$mw = function ($request, $response, $next) { 
    $response->getBody()->write('BEFORE');
    $response = $next($request, $response);
    $response->getBody()->write('AFTER');

    return $response;
};

$app->get('/', function ($request, $response, $args) {
    $response->getBody()->write(' Azuwir ');

    return $response;
})->add($mw);

$app->run();

middleware2

Group Middleware

Route group middleware dipanggil hanya jika rutenya cocok dengan metode HTTP request dan URI dari grup. Untuk menambahkan middleware dalam callback, dan seluruh group middleware harus diset dengan method add() setelah method group(). Contoh dapat dilihat di bawah ini (simpan dengan nama group-middleware.php di direktori slim):

<?php
require "vendor/autoload.php";

$app = new \Slim\App();

$app->group('/utils', function () use ($app) {
  $app->get('/date', function ($request, $response) {
    return $response->write(date('Y-m-d H:i:s'));
  });
  
  $app->get('/time', function ($request, $response) {
    return $response->write(time());
  });

})->add(function ($request, $response, $next) {
  $response->write('It is now ');
  $response = $next($request, $response);
  $response->write('. Enjoy!');

  return $response;
});

$app->run();

Tampilan untuk pemanggilan alamat: http://localhost/slim/group-middleware.php/utils/date

groupmidd1

Tampilan untuk pemanggilan alamat: http://localhost/slim/group-middleware.php/utils/time

groupmidd2

Referensi: http://www.slimframework.com/docs/concepts/middleware.html

You may also like

Leave a Reply

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