Friday, 3 June 2016

Middleware Pada Laravel 5


Definisi Middleware
Seperti namanya, middleware berperan sebagai pengengah antara request dan response, middleware juga berperan sebagai mekanisme filter request yang masuk untuk kemudian dikirimkan kepada controller untuk menghasilkan response atas request tersebut.
Sebagai contoh, laravel menyertakan middleware yang memverifikasi apakah user yang menggunakan aplikasi apakah authenticated atau tidak, jika user tersebut telah login dan terverified (authenticated), maka ia akan diredirect pada homepage/dashboard, namun jika tidak maka user tersebut akan diredirect kembali kehalaman login.

Middleware dapat dicreate dengan perintah berikut
php artisan make:middleware <middleware-name>
middleware yang terlah dibuat secara otomatis akan ditempatkan pada direktory app/Http/Middleware 

Contoh :
Kali ini kita akan coba membuat sebuah middleware yang dengan nama AgeMiddleware, berikut langkah-langkahnya :
Langkah1 :
Create Middleware dengan perintah artisan berikut pada terminal/command prompt
php artisan make:middleware AgeMiddleware
Langkah2 :
Setelah eksekusi perintah dilakukan maka akan muncul keterangan berikut pada terminal


Langkah3 :
 AgeMiddlware telah berhasil dibuat dan otomatis berada pada direktory app/Http/Middleware, dan isi dari file middleware AgeMiddleware adalah seperti berikut
<?php
namespace App\Http\Middleware;
use Closure;

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

Register Middleware
Sebelum dapat menggunakan middleware yang telah kita buat, kita perlu untuk meregister middleware pada aplikasi kita. Ada 2 type middleware pada laravel yaitu :
  • Global Middleware
  • Route Middleware
Global Middleware akan dijalankan setiapkali ada HTTP Request yang diterima aplikasi, sedangkan Route Middleware akan diterapkan hanya pada spesifik route, yaitu hanya middleware yang diregistrasikan pada route tersebut.
Middleware dapat diregister pada file kernel.php pada direktory app/Http pada file tersebut berisi 2 properties yaitu $middleware dan $routeMiddleware. Properti $middleware digunakan untuk meregister Global Middleware dan $routeMiddleware untuk meregister middleware yang spesifik pada route tertentu.

Untuk meregister global middleware, sisipkan class middleware yang akan digunakan pada akhir baris property $middleware seperti berikut :

protected $middleware = [
                \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
                \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,
               \App\Http\Middleware\AgeMiddleware::class,
];

Untuk meregister Route Middleware kita dapat menambahkan key dan value pada properti $routeMiddleware berikut ini

protected $routeMiddleware = [
     'auth' => \App\Http\Middleware\Authenticate::class,
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
     'age=> \App\Http\Middleware\AgeMiddleware::class,
];

Middleware Parameter
kita juga dapat melewatkan parameter dengan middleware, sebagai contoh : jika aplikasi yang kita buat memiliki beberapa roles yang berbeda seperti user, admin, super admin,dll, dan kita ingin melakukan aksi authentikasi berdasarkan role tersebut, hal ini tentunya dapat kita lakukan dengan middleware. middleware yang kita buat berisi fungsi yang dapat melewatkan custom argument setelah $next argument seperti berikut :
public function handle($request, Closure $next)
{
           return $next($request);
}
Contoh :
Langkah1 :
Create sebuah middleware dengan nama RoleMiddleware
php artisan make:middleware RoleMiddleware

Langkah2 :
Setelah mengeksekusi perintah diatas maka akan kita dapatkan output berikut :


Langkah3 :
Tambahkan kode berikut ini pada RoleMiddleware yang telah kita buat, dan berada pada app/Http/Middleware/RoleMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware
{
     public function handle($request, Closure $next, $role)
     {
           echo "Role: ".$role;
          return $next($request);
     }
}
Langkah4 :
Register RoleMiddleware pada file app\Http\Kernel.php tambahkan kode berikut ini :

Langkah5 :
Eksekusi perintah berikut ini pada terminal untuk mengcreate controller
php artisan make:controller TestController
Langkah6 :
Output dari perintah diatas adalah sebagai berikut


Langkah7 :
Tambahkan kode berikut ini pada app/Http/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
 

class TestController extends Controller
{
     public function index(){
         echo "<br>Test Controller.";
     }
}

Langkah8 :
Tambahkan kode berikut pada file app/Http/routes.php
Route::get('role',[
       'middleware' => 'Role:editor',
       'uses' => 'TestController@index',
]); 

Langkah9 :
Jalankan perintah berikut pada terminal
php artisan serve
 kemudian buka browser dengan url berikut http://localhost:8000/role

Langkah10: 
Berikut Output yang akan tampil pada browser
 

Sekian Pembahasan Singkat mengenai middleware pada laravel 5, pembahasan kita belum selesai, karena waktu yang sedikit untuk menuliskannya pada blog ini, maka akan saya coba bahas lebih lanjut pada kesempatan berikutnya.

Happy Coding...

No comments:

Post a Comment