Pernahkah Anda mendengar istilah middleware dalam pengembangan aplikasi atau website? Middleware merupakan salah satu elemen penting yang berfungsi untuk membantu developer saat melakukan proses coding agar lebih mudah. Artikel ini akan mengupas tuntas tentang laravel middleware khusus untuk Anda. Selamat membaca!
Apa itu Middleware?
Middleware adalah nama yang tidak asing bagi para web developer. Dalam dunia programming, middleware tergolong sebuah software layer. Sesuai namanya yaitu middle yang artinya tengah, maka letaknya berada di antara controller dan router. Ada juga yang mendefinisikan middleware sebagai software penengah antara satu aplikasi dengan aplikasi lain, sehingga proses integrasinya berjalan lebih mudah.
Dalam proses pembuatan produk software seperti aplikasi, Anda tentu wajib untuk membuat filter yang mampu memverifikasi request yang masuk. Filter tersebut berguna untuk mengecek status request seperti login, token CSRF, maupun privilege request. Nah, middleware ini adalah komponen untuk menjalankan proses tersebut.
Middleware memiliki berbagai framework, salah satunya Laravel. Middleware pada Laravel adalah komponen utama untuk proses autentikasi. Beberapa fungsinya antara lain :
- Autentikasi
- Validasi input
- Data logger
- Authorization
- Sanitasi input
- Respon handler
Laravel middleware bertugas melakukan pengecekan terhadap user yang sudah mempunyai hak akses web atau belum. Selain itu menjadi class khusus untuk menengahi controller sehingga dapat fokus mengurus logika pada flow alur bisnis saja. Diluar itu seperti validasi request masuk, menjadi tugas middleware.
Jika Anda menggunakan middleware maka sudah pasti setiap input bersih dan cocok dengan alur flow pada aplikasi, sehingga controller akan lebih mudah memprosesnya. Selain itu, kode website yang Anda kembangkan lebih tahan lama, maintainable, reusable, dan mudah terbaca.
Cara Membuat Laravel Middleware
Setelah mengetahui tentang apa itu middleware, sekarang saatnya artikel ini akan membahas cara membuat middleware laravel khusus untuk Anda.
Untuk membuat middleware, gunakan perintah make:middleware seperti contoh berikut :
php artisan make:middleware Admin
Perintah tersebut akan membuat file baru pada file app/Http/Middleware/Admin.php, buka file lalu Anda akan menemukan kode berikut:
// Edit file app/Http/Middleware/Admin.php
<?php
namespace App\Http\Middleware;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
Selanjutnya tambahkan logic pada bagian function handle untuk memfilter request middleware Admin. Berikut ini kodenya:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == ‘admin’) {
return $next($request);
}
return redirect(‘/’);
}
Kemudian daftarkan pada file app/Http/Kernel.php seperti berikut:
// Edit file app/Http/Kernel.php
protected $routeMiddleware = [
.....
‘admin’ => \App\Http\Middleware\Admin::class,
];
Tambahkan middleware route seperti berikut:
// Edit file routes/web.php
Route::get(‘posts’, ‘PostController@index’)->middleware(‘admin’);
Middleware pada Routes
Berikut ini kode untuk menggunakan function pada route yang ingin Anda filter menggunakan Admin.
// routes/web.php
Route::get('home', 'HomeController@index')->middleware('auth','admin');
Jika middleware groups maka seperti ini:
// routes/web.php
Route::group([‘middleware’ => [‘admin’]], function () {
Route::get(‘home’, ‘HomeController@index’);
});
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('home', 'HomeController@index');
});
Middleware pada Controller
Jika Anda ingin menambahkan middleware pada bagian controller maka langsung saja tambahkan method middleware() pada class constructor berikut :
// Edit controller HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
function __construct()
{
$this->middleware(‘admin’);
}
public function index()
{
$data = [‘Kendal’, ‘Semarang’];
return view(‘posts’, compact(‘data’));
}
}
Anda bisa membatasi hanya pada method tertentu dalam sebuah class controller. Misalnya dengan menambahkan middleware admin pada method index dan edit berikut:
class HomeController extends Controller
{
function __construct()
{
$this->middleware('admin')->only('index','edit');
}
public function index()
{
// Method index
}
public function show()
{
// Method show
}
public function edit()
{
// Method edit
}
}
Anda juga bisa menambahkan except jika ingin menambahkan pada semua method kecuali show. Berikut ini contoh kodenya:
class HomeController extends Controller
{
function __construct()
{
$this->middleware('admin')->except('show');
}
}
Middleware Parameters
Laravel middleware juga bisa menerima parameter, misalnya saat Anda ingin membuat CheckRole dengan mengirim parameters editor. Maka tambahkan parameter setelah argumen $next seperti berikut:
// edit Middleware CheckRole.php
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @paramstring $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
return $next($request);
}
return redirect(‘/login’);
}
}
Kemudian model user Anda tambahan logic pada method hasRole(). Hal ini bertujuan untuk mengecek apakah parameter sudah sama dengan usertype database table users:
// model User.php
class User extends Authenticatable
{
public function hasRole($role)
{
// check param $role dengan field usertype
if ($role == $this->usertype) {
return true;
}
return false;
}
}
Selanjutnya daftarkan laravel middleware CheckRole pada file app/Http/Kernel.php.
// Edit file app/Http/Kernel.php
protected $routeMiddleware = [
.....
‘role’ => \App\Http\Middleware\CheckRole::class,
];
Terakhir, edit file routes/web.php berikut :
Route::get(‘home’, ‘HomeController@index’)->middleware(‘role:editor’);
Yuk, Buat Laravel Middleware Sekarang!
Demikian artikel tentang laravel middleware beserta cara membuatnya. Bagi Anda yang ingin mengembangkan aplikasi website, sebaiknya segera saja pelajari dan praktekkan middleware mulai dari proyek kecil hingga berkembang menjadi lebih kompleks.
I’m an experienced SEO Specialist who can grow a website through organic channel. I’m also passionate about digital marketing and web development