Artikulo

Laravel middleware kung paano ito gumagana

Ang Laravel middleware ay isang intermediate application layer na namagitan sa pagitan ng kahilingan ng user at ng tugon ng application.

Nangangahulugan ito na kapag ang user (Laravel view) ay gumawa ng kahilingan sa server (Laravel controller), ang kahilingan ay dadaan sa middleware. Sa ganitong paraan masusuri ng middleware kung napatotohanan o hindi ang kahilingan: 

  • kung ang kahilingan ng user ay napatotohanan, ang kahilingan ay ipapadala sa backend;
  • kung hindi napatotohanan ang kahilingan ng user, ire-redirect ng middleware ang user sa login screen.

Pinapayagan ka ng Laravel na defitapusin at gumamit ng karagdagang middleware upang magsagawa ng iba't ibang gawain maliban sa pagpapatunay. 

Ang mga middleware ng Laravel, tulad ng pagpapatunay at proteksyon ng CSRF, ay matatagpuan sa direktoryo app/Http/Middleware .

Kaya't maaari nating sabihin na ang middleware ay isang filter ng kahilingan sa http, kung saan posible na i-verify ang mga kundisyon at magsagawa ng mga aksyon.

Paglikha ng middleware

Upang lumikha ng isang bagong middleware pinapatakbo namin ang sumusunod na command:

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

Lumilikha kami ng middleware at tinatawag namin ito CheckAge, artisan sasagutin tayo ng mga sumusunod:

Ang window sa itaas ay nagpapakita na ang middleware ay matagumpay na nalikha na may pangalang ” CheckAge ".

Upang makita kung ang CheckAge middleware ay ginawa o hindi, pumunta sa proyekto sa app/Http/Middleware folder, at makikita mo ang bagong likhang file

Ang bagong likhang file ay may sumusunod na code

<?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);
    }
}

Gumamit ng middleware

Upang magamit ang middleware, kailangan nating irehistro ito.

Mayroong dalawang uri ng middleware sa Laravel:

  • Middleware globale
  • Route Middleware

Il pandaigdigang middleware ay isasagawa sa bawat kahilingan sa HTTP mula sa application, habang ang Ruta Middleware ay itatalaga sa isang tiyak na landas. Maaaring irehistro ang Middleware sa app/Http/Kernel.php. Ang file na ito ay naglalaman ng dalawang katangian $middleware e $routeMiddleware . Ang ari-arian ng $middleware ay ginagamit upang irehistro ang pandaigdigang middleware at pagmamay-ari $routeMiddleware ay ginagamit upang magrehistro ng middleware na partikular sa ruta.

Para irehistro ang pandaigdigang middleware, ilista ang klase sa dulo ng $middleware property.

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,
    ];

Upang irehistro ang middleware na partikular sa ruta, idagdag ang susi at halaga sa ari-arian ng $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,
    ];

Nilikha namin CheckAge sa nakaraang halimbawa. Maaari na nating irehistro ito sa property ng middleware route. Ang code para sa naturang pagpaparehistro ay ipinapakita sa ibaba.

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,
    ];

Mga parameter ng middleware

Maaari rin kaming magpasa ng mga parameter gamit ang Middleware. 

Halimbawa, kung ang iyong application ay may iba't ibang tungkulin tulad ng user, admin, super admin atbp. at gusto mong patunayan ang aksyon batay sa tungkulin, magagawa mo ito sa pamamagitan ng pagpasa sa mga parameter gamit ang middleware. 

Ang middleware na ginawa namin ay naglalaman ng sumusunod na function, at maaari naming ipasa ang mga custom na argumento pagkatapos ng argumento $susunod .

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

Ngayon subukan nating itakda ang parameter ng papel sa isang bagong middleware na gagawin natin mula sa simula, pagkatapos ay magpatuloy upang lumikha ng Role Middleware sa pamamagitan ng pagpapatakbo ng sumusunod na command

Baguhin ang paraan ng paghawak tulad ng sumusunod

<?php

namespace App\Http\Middleware;
use Closure;

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

idinagdag namin ang parameter $role, at sa loob ng pamamaraan ang linya echo upang isulat ang output ang pangalan ng tungkulin.

newsletter ng pagbabago
Huwag palampasin ang pinakamahalagang balita sa pagbabago. Mag-sign up upang matanggap ang mga ito sa pamamagitan ng email.

Ngayon, irehistro natin ang RoleMiddleware middleware para sa isang partikular na landas

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,
    ];

Ngayon upang subukan ang middleware gamit ang parameter, kailangan naming lumikha ng isang kahilingan at isang tugon. Para gayahin ang tugon, gawin natin ang controller na tatawagin nating TestController

php artisan make:controller TestController --plain

ang utos na kakatupad lang ay lilikha ng bagong controller sa loob ng folder app/Http/TestController.php, at baguhin ang paraan index kasama ang linya 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.";
   }
}

Pagkatapos i-set up ang tugon, binubuo namin ang kahilingan sa pamamagitan ng pag-edit ng file routes.phpsa pamamagitan ng pagdaragdag ng route role

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

sa puntong ito maaari nating subukan ang halimbawa sa pamamagitan ng pagbisita sa URL http://localhost:8000/role

at sa browser makikita natin ang dalawa echo

Role editor
Test Controller

Nawawakasan Middleware

Il terminable Middleware gumaganap ng ilang gawain pagkatapos maipadala ang tugon sa browser. Ito ay maaaring makamit sa pamamagitan ng paglikha ng isang middleware na may pamamaraan wakasan sa middleware. Il terminable Middleware dapat nakarehistro sa middleware global. Ang paraan terminate tatanggap ng dalawang argumento $request e $tugon. 

Ang paraan Terminate dapat gawin tulad ng ipinapakita sa sumusunod na code.

php artisan make:middleware TerminateMiddleware

Kapag nalikha na ang middleware app/Http/Middleware/TerminateMiddleware.php baguhin natin ang code tulad ng sumusunod

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

sa kasong ito mayroon kaming isang pamamaraan handle at isang pamamaraan terminate kasama ang dalawang parameter $request e $response.

Ngayon, irehistro natin ang 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,
    ];

Ngayon kailangan nating lumikha ng controller upang gayahin ang tugon

php artisan make:controller XYZController --plain

pagbabago ng nilalaman ng klase

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

Ngayon kailangan nating i-edit ang file routes/web.php pagdaragdag ng mga rutang kailangan para i-activate ang kahilingan

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

sa puntong ito maaari nating subukan ang halimbawa sa pamamagitan ng pagbisita sa URL http://localhost:8000/terminate

at sa browser makikita natin ang mga sumusunod na linya

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

Ercole Palmeri

Maaari mo ring gusto:

newsletter ng pagbabago
Huwag palampasin ang pinakamahalagang balita sa pagbabago. Mag-sign up upang matanggap ang mga ito sa pamamagitan ng email.

Kamakailang Mga Artikulo

Pumirma ang mga publisher at OpenAI ng mga kasunduan para i-regulate ang daloy ng impormasyong pinoproseso ng Artificial Intelligence

Noong nakaraang Lunes, inihayag ng Financial Times ang isang deal sa OpenAI. Nilisensyahan ng FT ang world-class na pamamahayag nito...

Abril 30 2024

Mga Online na Pagbabayad: Narito Kung Paano Ka Binabayaran ng Mga Serbisyo ng Streaming Magpakailanman

Milyun-milyong tao ang nagbabayad para sa mga serbisyo ng streaming, na nagbabayad ng buwanang bayad sa subscription. Karaniwang opinyon na ikaw ay…

Abril 29 2024

Itinatampok ng Veeam ang pinakakomprehensibong suporta para sa ransomware, mula sa proteksyon hanggang sa pagtugon at pagbawi

Ang Coveware ng Veeam ay patuloy na magbibigay ng mga serbisyo sa pagtugon sa insidente ng cyber extortion. Mag-aalok ang Coveware ng mga kakayahan sa forensics at remediation...

Abril 23 2024

Green and Digital Revolution: Kung Paano Binabago ng Predictive Maintenance ang Industriya ng Langis at Gas

Binabago ng predictive maintenance ang sektor ng langis at gas, na may makabago at proactive na diskarte sa pamamahala ng halaman.…

Abril 22 2024