Di framework Laravel, akan ada fitur middleware. Kita mungkin sering berkeinginan untuk mem-filter permintaan dari HTTP yang masuk ke aplikasi kita. Sesuai dengan namanya middleware, bertindak sebagai penengah antara permintaan dan respon. Misalnya aplikasi yang kita buat apakah diverifikasi atau tidak, jika pengguna sudah mendapatkan otoritasi apakah diarahkan ke suatu halaman atau tetap di halaman yang sama.
Middleware adalah sebuah class khusus yang berperan sebagai penengah antara permintaan yang masuk dengan controller yang akan dituju. Pada Laravel sebelumnya (di bawah versi 4), fitur ini dinamakan filter.
Membuat Middleware
Middleware dapat dibuat dengan menggunakan artisan :
1 |
php artisan make:middleware TestMiddleware |
Contoh di atas, kita membuat middleware dengan nama TestMiddleware. Kemudian untuk melihat hasil dari middleware yang telah dibuat, bisa dibuka di folder : /app/http/Middleware/ , isinya seperti ini :
1 2 3 4 5 6 7 8 9 10 11 |
namespace belajarlaravel\Http\Middleware; use Closure; class TestMiddleware { public function handle($request, Closure $next) { return $next($request); } } |
Register Middleware
Setiap middleware yang dibuat harus di-register terlebih dahulu sebelum digunakan. Ada dua tipe middleware di Laravel :
- Global Middleware : akan bekerja pada semua permintaan dari HTTP pada aplikasi.
- Route Middleware : akan bekerja pada route yang ditentukan.
Middleware dapat di-register di /app/Http/Kernel.php. Pada file ini akan muncul dua jenis middleware : $middleware (digunakan untuk Global Middleware) dan $routeMiddleware (digunakan untuk Route Middleware). Untuk register di global, tambahkan middleware pada akhir properti. Sedangkan pada route, tambahkan key dan value pada properti middleware.
Sebagai contoh dari middleware yang dibuat sebelumnya, kita akan register :
Global :
1 2 3 4 |
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \belajarlaravel\Http\Middlware\TestMiddleware::class, ]; |
Route :
1 2 3 4 5 6 7 |
protected $routeMiddleware = [ 'auth' => \belajarlaravel\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \belajarlaravel\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'tipe' => \belajarlaravel\Http\Middlware\TestMiddleware::class, ]; |
Parameter pada middleware
Kita bisa menggunakan parameter pada middleware, misalnya aplikasi membagi akses pada pengguna seperti admin dan user. Kita bisa memanfaatkan parameter di middleware untuk hal ini. Untuk menambahkan parameter bisa dilakukan dengan menambahkan argumen baru setelah argumen $next. Misalnya pada middleware yang telah kita buat tadi :
1 2 3 4 5 6 7 8 9 10 11 12 |
namespace belajarlaravel\Http\Middleware; use Closure; class TestMiddleware { public function handle($request, Closure $next, $tipe) { echo "tipe: " . $tipe; return $next($request); } } |
Kemudian buat controller baru dengan nama TestController dengan menggunakan artisan :
1 |
php artisan make:controller Testcontroller |
Untuk controller yang telah dibuat bisa dibuka di /app/Http/Controller/. Tambahkan function baru, seperti di bawah ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
namespace belajarlaravel\Http\Controllers; use Illuminate\Http\Request; use belajarlaravel\Http\Requests; use belajarlaravel\Http\Controllers\Controller; class Testcontroller extends Controller { public function index() { echo "<br>Test Controller"; } } |
Kemudian tambahkan baris kode pada /app/Http/routes.php
1 2 3 4 |
Route::get('tipe', [ 'middleware' => 'Tipe:admin', 'uses' => 'Testcontroller@index', ]); |
Silakan dicoba dengan membuka halaman : http://www.laravel.local/tipe (saya menggunakan virtual host)
Terminate Middleware
Fitur penting lainnya adalah mengakhiri middleware yang akan dieksekusi setelah respon dikirim. Untuk membuatnya tambahkan terminate() pada middleware. Untuk mencobanya, silakan buat middleware dan controller baru seperti langkah di atas. Kemudian tambahkan kode di bawah pada middleware :
1 2 3 |
public function terminate($request, $response) { echo "<br>Mengakhiri middleware"; } |
Registrasikan middleware :
1 |
'terminate' => \belajarlaravel\Http\Middleware\BaruMiddleware::class, |
Kemudian pada routes.php tambahkan :
1 2 3 4 |
Route::get('terminate', [ 'middleware' => 'terminate', 'uses' => 'Barucontroller@index', ]); |
Silakan dicoba dengan membuka URL : http://www.laravel.local/terminate
Semoga bermanfaat 🙂