Artikel

Laravel middleware cara kerjane

Laravel middleware minangka lapisan aplikasi penengah sing ngintervensi antarane panjalukan pangguna lan respon aplikasi.

Iki tegese nalika pangguna (Laravel view) nggawe panjalukan kanggo server (Laravel controller), panjalukan bakal liwat middleware. Kanthi cara iki middleware bisa mriksa manawa panyuwunan kasebut dikonfirmasi utawa ora: 

  • yen panjalukan pangguna wis dikonfirmasi, panjalukan dikirim menyang backend;
  • yen panjalukan pangguna ora dikonfirmasi, middleware bakal ngarahake pangguna menyang layar login.

Laravel ngidini sampeyan defirampung lan gunakake middleware tambahan kanggo nindakake macem-macem tugas kajaba otentikasi. 

Laravel middlewares, kayata otentikasi lan proteksi CSRF, dumunung ing direktori app/Http/Middleware .

Mulane kita bisa ngomong yen middleware minangka panyaring panyuwunan http, sing bisa verifikasi kahanan lan nindakake tumindak.

Nggawe middleware

Kanggo nggawe middleware anyar, kita mbukak printah ing ngisor iki:

php artisan make:middleware <name-of-middleware>

Kita nggawe middleware lan kita nelpon CheckAge, artisan bakal mangsuli kita kaya ing ngisor iki:

Jendhela ing ndhuwur nuduhake yen middleware wis kasil digawe kanthi jeneng " PriksaAge ".

Kanggo ndeleng manawa middleware CheckAge digawe utawa ora, pindhah menyang proyek ing folder app/Http/Middleware, lan sampeyan bakal weruh file sing mentas digawe.

File sing mentas digawe nduweni kode ing ngisor iki

<?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)
    {
        return $next($request);
    }
}

Gunakake middleware

Kanggo nggunakake middleware, kita kudu ndhaptar.

Ana rong jinis middleware ing Laravel:

  • Middleware globale
  • Route Middleware

Il middleware global bakal kaleksanan ing saben request HTTP saka aplikasi, nalika ing Rute Middleware bakal diutus kanggo path tartamtu. Middleware bisa didaftar ing app/Http/Kernel.php. Berkas iki ngemot rong sifat $ piranti tengah e $routeMiddleware . Properti $ middleware digunakake kanggo ndhaftar middleware global lan kepemilikan $routeMiddleware digunakake kanggo ndhaftar middleware spesifik rute.

Kanggo ndhaptar middleware global, dhaptar kelas ing mburi properti $ middleware.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Kanggo ndhaptar middleware khusus rute, tambahake kunci lan nilai properti $routeMiddleware.

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Kita digawe PriksaAge ing conto sadurunge. Saiki kita bisa ndhaftar iki ing properti rute middleware. Kode kanggo registrasi kasebut ditampilake ing ngisor iki.

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Parameter middleware

Kita uga bisa ngliwati parameter karo Middleware. 

Contone, yen aplikasi sampeyan duwe peran beda kaya pangguna, admin, super admin etc. lan sampeyan pengin keasliane tumindak adhedhasar peran, sampeyan bisa nindakake iku dening pass paramèter karo middleware. 

Middleware sing digawe ngemot fungsi ing ngisor iki, lan kita bisa ngliwati argumen khusus sawise argumen kasebut $sabanjure .

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

Saiki ayo nyoba nyetel parameter peran menyang middleware anyar sing bakal digawe saka awal, banjur nerusake nggawe Role Middleware kanthi nglakokake perintah ing ngisor iki

Ngowahi cara nangani minangka nderek

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

kita nambah parameter $role, lan nang metode baris echo kanggo nulis output jeneng peran.

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Saiki ayo ndhaptar middleware RoleMiddleware kanggo path tartamtu

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Saiki kanggo nyoba middleware karo parameter, kita kudu nggawe panjalukan lan respon. Kanggo simulasi respon, ayo nggawe controller sing bakal diarani TestController

php artisan make:controller TestController --plain

printah mung kaleksanan bakal nggawe controller anyar nang folder app/Http/TestController.php, lan ngganti cara index karo baris echo "<br>Test Controller.";

<?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.";
   }
}

Sawise nyetel respon, kita mbangun panjalukan kanthi nyunting file kasebut routes.phpkanthi nambahake route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

ing titik iki kita bisa nyoba conto kanthi ngunjungi URL http://localhost:8000/role

lan ing browser kita bakal weruh loro echo

Role editor
Test Controller

Middleware Terminable

Il terminable Middleware nindakake sawetara tugas sawise respon dikirim menyang browser. Iki bisa digayuh kanthi nggawe middleware kanthi metode kasebut mungkasi ing middleware. Il terminable Middleware kudu ndhaftar ing middleware global. Metode terminate bakal nampa rong argumen $anjaluk e $respon. 

Caranipun Terminate kudu digawe kaya sing ditampilake ing kode ing ngisor iki.

php artisan make:middleware TerminateMiddleware

Sawise middleware digawe app/Http/Middleware/TerminateMiddleware.php ayo diowahi kode kaya ing ngisor iki

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

ing kasus iki kita duwe cara handle lan metode terminate karo loro paramèter $request e $response.

Saiki ayo ndhaptar Middleware

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,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Saiki kita kudu nggawe controller kanggo simulasi respon

php artisan make:controller XYZController --plain

ngowahi isi kelas

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

Saiki kita kudu ngowahi file kasebut routes/web.php nambahake rute sing dibutuhake kanggo ngaktifake panyuwunan

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

ing titik iki kita bisa nyoba conto kanthi ngunjungi URL http://localhost:8000/terminate

lan ing browser kita bakal weruh baris ing ngisor iki

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Sampeyan bisa uga seneng:

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Artikel anyar

Intervensi inovatif ing Augmented Reality, karo panampil Apple ing Poliklinik Catania

Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…

3 May 2024

Keuntungan saka Mewarnai Kaca kanggo Bocah-bocah - jagad sihir kanggo kabeh umur

Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…

2 May 2024

Masa Depan Iki: Kepiye Industri Pengiriman Revolusi Ekonomi Global

Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...

1 May 2024

Penerbit lan OpenAI menehi tandha persetujuan kanggo ngatur aliran informasi sing diproses dening Artificial Intelligence

Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…

30 April 2024