Lompat ke konten Lompat ke sidebar Lompat ke footer

Belajar Middleware Framework Laravel Terbaru

Assalamualaikum, Pada kesempatan kali ini admin akan membahas mengenai Middleware pada Framework laravel, tentunya pembelajaran mengenai belajar middleware framework laravel ini sangat penting untuk kita pelajari, banyak hal yang akan kita pelajari mengenai Belajar Middleware Framework Laravel terbaru ini yaitu mengenai  perkenalan middleware, defining middleware, Registerting Middleware, Middleware parameter serta Terminable middleware, lalu apa saja point pembahasahannya?Silahkan teman- teman simak point pembahasannya dibawah ini:
  1. Perkenalan mengenai Middleware
  2. Defining Middleware
  3. Registering Middleware
    • Global Middleware
    • Assigning Middleware untuk Routes
    • Middleware Groups
    • Sorting Middleware
  4. Middleware Parameters
  5. Terminable Middleware
Setelah kita tahu point- point apa saja yang akan kita bahas pada artikel kali ini, tentunya akan mempermudah teman- teman dalam belajar dan memahami penjelasannya. Oke kita mulai saja pembahasannya. Silahkan teman- teman simak pembahasan dibawah ini.

Untuk tutorial sebelumnya silahkan teman- teman kunjungi artikel ini: Belajar Route Pada Framework Laravel Terbaru dan Terlengkap

Apa itu Middleware?

Middleware merupakan suatu mekanisme penyaringan HTTP request yang masuk kedalam aplikasi teman- teman atau dapat dikatakan setiap ada request yang masuk tentunya maka akan difilter oleh yang dinamakan middleware. Sebagai contohnya laravel sendiri telah menyediakan suatu otentikasi pada aplikasi yang teman- teman buat, jika user atau pengguna gagal melakukan otentikasi maka user tersebut akan diarahkan ke halaman login. Namun jika user tersebut berhasil melakukan suatu otentikasi, maka middleware akan mengizinkan pengguna untuk melakukan suatu request selanjutnya pada suatu aplikasi yang telah dibuat tersbut.

Tentunya tidak hanya berkerja pada suatu otentikasi saja, teman- teman juga dapat membuat middleware untuk menangani berbagai tugas lainnya. Secara defaultnya laravel sudah menyediakan beberapa middleware yang sudah siap digunakan untuk otentikasi serta CSRF protection yang tentunya dapat kita temukan didalam direktori app/Http/Middleware.


1. Perkenalan

Middleware tentunya menyediakan suatu mekanisme yang nyaman untuk memfilter permintaan HTTP memasuki aplikasi yang teman- teman buat. Misalnya, Laravel menyertakan middleware yang dapat memverifikasi bahwa pengguna aplikasi teman- teman diautentikasi. Jika penggunanya tidak kita diautentikasi, middleware akan mengarahkan penggunanya ke halaman login. Namun, jika pengguna diautentikasi, middleware tentunya akan memungkinkan permintaan untuk melanjutkan lebih jauh ke dalam aplikasi yang telah teman- teman buat.

Middleware tambahan tentunya dapat ditulis untuk melakukan berbagai tugas selain otentikasi. Middleware CORS juga mungkin bertanggung jawab untuk menambahkan tajuk yang tepat untuk semua tanggapan yang meninggalkan aplikasi yang telah teman- teman buat. Middleware logging mungkin juga dapat mencatat semua permintaan yang masuk ke aplikasi Kalian.

Terdapat beberapa middleware yang termasuk dalam kerangka pada Framework Laravel, termasuk middleware untuk otentikasi serta perlindungan CSRF. Semua middleware ini terletak di direktori app / Http / Middleware. Selanjutnya kita akan membahas mengenai Defining Middleware, silahkan teman- teman simak pembahasan dibawah ini.



2. Defining Middleware

Untuk membuat middleware baru, gunakan perintah make: middleware Artisan:
php artisan make:middleware CheckAge
Dengan menggunakan perintah diatas tentunya akan menempatkan kelas CheckAge baru di dalam direktori app / Http / Middleware pada projek teman- teman. Pada middleware tersebut, kita hanya akan mengizinkan akses ke rute jika age yang disediakan lebih dari 200. Jika tidak, maka kita akan mengarahkan pengguna kembali ke URI home, untuk contoh penerapannya silahkan perhatikan dan pahami script dibawah ini:
<?php

namespace App\Http\Middleware;

use Closure;

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

        return $next($request);
    }
}
Seperti yang teman- teman lihat, jika age atau usia yang diberikan kurang dari atau sama dengan 200, middleware akan mengembalikan pengalihan HTTP ke klien/ penggunanya; jika tidak, permintaan akan diteruskan lebih lanjut ke dalam aplikasi. Untuk meneruskan permintaan yang teman-teman buat ke dalam aplikasi, silahkan hubungi $next dan panggil kembali dengan menggunakan $request.

Yang terbaik tentunya adalah dapat membayangkan middleware karena serangkaian "HTTP" harus melalui permintaan HTTP sebelum mereka menekan aplikasi yang teman- teman buat. Setiap lapisan dapat memeriksa permintaan dan bahkan menolak seluruhnya.
Semua middleware diselesaikan melalui suatu layanan, jadi teman- teman dapat mengetik-petunjuk setiap dependensi yang teman- teman butuhkan di dalam konstruktor middleware.
Before & After Middleware
Apakah suatu middleware itu berjalan sebelum atau setelah permintaan tentunya tergantung pada middleware itu sendiri. Misalnya, middleware berikut akan melakukan beberapa tugasnya sebelum permintaan ditangani oleh aplikasi yang teman- teman buat, silahkan perhatikan script dibawah ini:
<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}
Namun, middleware ini tentunya akan melakukan tugasnya setelah permintaan tersebut ditangani oleh aplikasi, untuk contohnya silahkan perhatikan potongan script dibawah ini:
<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}
Selanjutnya admin akan membahas mengenai Registering Middleware, silahkan teman- teman simak pembahasan dibawah ini.


3. Registering Middleware

#Global Middleware

Jika teman- teman ingin middleware dijalankan selama setiap permintaan HTTP ke aplikasi yang teman- teman buat, daftarkan class middleware didalam properti $middleware dalam direktori app/ Http / Kernel.php.

#Assigning Middleware To Routes

Jika teman- teman ingin menetapkan suatu middleware ke dalam route tertentu, teman- teman harus terlebih dahulu menetapkan key middleware didalam file app / Http / Kernel.php teman- teman. Secara default, properti $routeMiddleware dari class ini berisi entri untuk middleware yang disertakan dengan framework Laravel. Untuk menambahkannya teman- teman perlu menambahkan ke daftar ini dan berikan key pilihan yang akan digunakan dalam aplikasi:
// Within App\Http\Kernel Class...

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
Setelah middleware kita definisikan kedalam kernel HTTP, teman- teman tentunya dapat menggunakan metode middleware untuk menetapkan middleware ke sebuah route:
Route::get('admin/profile', function () {
    //
})->middleware('auth');
Teman- teman juga dapat menetapkan beberapa middleware untuk route, contohnya seperti berikut:
Route::get('/', function () {
    //
})->middleware('first', 'second');
Saat teman- teman menetapkan middleware, teman- teman juga tentunya dapat memberikan nama class yang sepenuhnya memenuhi persyaratan:
use App\Http\Middleware\CheckAge;

Route::get('admin/profile', function () {
    //
})->middleware(CheckAge::class);
Saat menetapkan suatu middleware ke dalam group route, teman- teman mungkin sesekali perlu mencegah agar middleware tidak diterapkan ke route individual di dalam group. kalian dapat melakukannya dengan menggunakan metode withoutMiddleware, silahkan perhatikan script dibawah ini:
use App\Http\Middleware\CheckAge;

Route::middleware([CheckAge::class])->group(function () {
    Route::get('/', function () {
        //
    });

    Route::get('admin/profile', function () {
        //
    })->withoutMiddleware([CheckAge::class]);
});
Metode withoutMiddleware hanya dapat menghapus route middleware dan tidak berlaku pada middleware global.


#Middleware Groups

Terkadang teman- teman tentunya mungkin ingin mengelompokkan beberapa middleware di dalam satu tombol untuk membuatnya lebih mudah untuk ditetapkan kedalam route. teman- teman dapat melakukan ini menggunakan properti $middlewareGroups dari kernel HTTP yang teman- teman miliki.

Di luar kotak, tentunya Laravel dilengkapi dengan group middleware web maupun api yang berisi middleware umum yang mungkin ingin teman- teman terapkan ke UI web serta route API yang teman -teman miliki, contoh penerapannya seperti dibawah ini:
/**
 * The application's route middleware groups.
 *
 * @var array
 */
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,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'auth:api',
    ],
];
Grup Middleware juga dapat ditugaskan untuk route serta tindakan pengontrol menggunakan sintaksis yang sama dengan suatu middleware individu. Sekali lagi, group middleware dalap membuat lebih mudah untuk menetapkan banyak middleware ke route sekaligus:
Route::get('/', function () {
    //
})->middleware('web');

Route::group(['middleware' => ['web']], function () {
    //
});

Route::middleware(['web', 'subscribed'])->group(function () {
    //
});
Di luar kotak, grup middleware web tentunya secara otomatis dapat diterapkan ke file rute / web.php teman- teman oleh RouteServiceProvider.

#Sorting Middleware

Tentunya Jarang, teman- teman mungkin perlu middleware untuk dapat mengeksekusi dalam urutan tertentu tetapi tidak memiliki kontrol atas pesanan tersennut ketika ditugaskan ke route. Dalam hal ini, kalian dapat menentukan prioritas middleware dengan menggunakan properti $middlewarePriority yang terdapat dalam dile app/ Http / Kernel.php, silahkan perhatikan contoh penerapannya seperti dibawah ini:
/**
 * The priority-sorted list of middleware.
 *
 * This forces non-global middleware to always be in the given order.
 *
 * @var array
 */
protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];
Selanjutnya kita akan mempelajari mengenai middleware parameters, Silahkan teman- teman simak pembahasan dibawah ini.


4. Middleware Parameters

Middleware tentunya juga dapat menerima suatu parameter tambahan. Misalnya, jika aplikasi yang teman- teman buat perlu memverifikasi bahwa pengguna yang diautentikasi memiliki "peran" yang diberikan sebelum melakukan suatu tindakan yang diberikan, teman- teman dapat membuat middleware CheckRole yang dapat menerima nama peran sebagai suatu argumen tambahan.

Parameter middleware tambahan tentunya akan diteruskan ke middleware setelah $next argumen:
<?php

namespace App\Http\Middleware;

use Closure;

class CheckRole
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // Redirect...
        }
        return $next($request);
    }}
Parameter Middleware juga dapat ditentukan saat mendefinisikan suatu route dengan memisahkan name dan parameter middleware dengan :. Beberapa parameter tentunya harus dibatasi oleh koma, contohnya seperti dibawah in:
Route::put('post/{id}', function ($id) {
    //
})->middleware('role:editor');
Selanjutnya admin akan membahas mengenai Terminable Middleware, silahkan teman- teman simak dan pahami pembahasan dibawah ini.


5. Terminable Middleware

Terkadang middleware juga mungkin perlu melakukan beberapa pekerjaan setelah mendapakan respons dari HTTP  yang dikirim ke browser. Jika teman- teman menentukan metode terminasi pada suatu middleware teman- teman serta server web dapat menggunakan FastCGI, metode terminate akan secara otomatis dipanggil setelah suatu respons dikirim ke browser:
<?php

namespace Illuminate\Session\Middleware;

use Closure;

class StartSession
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request, $response)
    {
        // Store the session data...
    }
}
Metode terminasi juga tentunya harus menerima permintaan serta respons. Setelah teman- teman mendefinisikan middleware yang dapat diakhiri, teman- teman tentunya harus menambahkannya ke daftar route ataupun middleware global didalam file app / Http / Kernel.php.

Saat memanggil suatu metode terminate pada middleware, Laravel akan menyelesaikan contoh baru dari middleware dari service container. Jika teman- teman ingin menggunakan instance middleware yang sama ketika metode handle serta terminate dipanggil, daftarkan middleware dengan container menggunakan metode container singleton. Biasanya ini harus dilakukan dalam metode register didalam file AppServiceProvider.php, silahkan teman- teman perhatikan script dibawah ini:
use App\Http\Middleware\TerminableMiddleware;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->app->singleton(TerminableMiddleware::class);
}
Kita tentunya sudah mempelajari mengenai penerapan middleware pada framework laravel ini. Mungkin sekian yang dapat admin sampaikan semoga artikel ini dapat memberikan pemahasan mengenai Middleware pada framework laravel.

Terimakah teman- teman telah telah berkunjung dan membaca artikel ini mengenai: Belajar Middleware Framework Laravel Terbaru , semoga bermanfaat -- salam success :)

By: Muhammad Rizal Supriadi