Straipsniai

„Laravel“ tarpinė programinė įranga, kaip ji veikia

Laravel tarpinė programinė įranga yra tarpinis programos sluoksnis, įsiterpiantis tarp vartotojo užklausos ir programos atsakymo.

Tai reiškia, kad kai vartotojas (Laravel vaizdas) pateikia užklausą serveriui (Laravel valdikliui), užklausa bus perduodama per tarpinę programinę įrangą. Tokiu būdu tarpinė programinė įranga gali patikrinti, ar užklausa autentifikuota, ar ne: 

  • jei vartotojo užklausa autentifikuota, užklausa siunčiama į backend;
  • jei vartotojo užklausa neautentifikuota, tarpinė programinė įranga nukreips vartotoją į prisijungimo ekraną.

Laravel leidžia jums defiužbaigti ir naudoti papildomą tarpinę programinę įrangą įvairioms užduotims atlikti, išskyrus autentifikavimą. 

„Laravel“ tarpinės programinės įrangos, tokios kaip autentifikavimas ir CSRF apsauga, yra kataloge app/Http/Middleware .

Todėl galime sakyti, kad tarpinė programinė įranga yra http užklausos filtras, per kurį galima patikrinti sąlygas ir atlikti veiksmus.

Tarpinės programinės įrangos kūrimas

Norėdami sukurti naują tarpinę programinę įrangą, vykdome šią komandą:

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

Mes kuriame middleware ir mes tai vadiname CheckAge, artisan mums atsakys taip:

Aukščiau pateiktame lange rodoma, kad tarpinė programinė įranga buvo sėkmingai sukurta pavadinimu " Patikrinkite amžių ".

Norėdami sužinoti, ar tarpinė programinė įranga yra sukurta, ar ne, eikite į projektą aplanke programėlė/Http/Middleware ir pamatysite naujai sukurtą failą.

Naujai sukurtame faile yra toks kodas

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

Naudokite tarpinę programinę įrangą

Norėdami naudoti tarpinę programinę įrangą, turime ją užregistruoti.

„Laravel“ yra dviejų tipų tarpinė programinė įranga:

  • Middleware globale
  • Route Middleware

Il pasaulinė tarpinė programinė įranga bus vykdoma kiekvienai HTTP užklausai iš programos, o Maršruto tarpinė programinė įranga bus priskirtas konkrečiam keliui. Tarpinę programinę įrangą galima registruoti adresu app/Http/Kernel.php. Šiame faile yra dvi ypatybės $tarpinės programos e $routeMiddleware . $middleware nuosavybė naudojamas registruoti pasaulinę tarpinę programinę įrangą ir nuosavybės teisę $routeMiddleware naudojamas registruoti specifinę maršruto tarpinę programinę įrangą.

Norėdami užregistruoti visuotinę tarpinę programinę įrangą, nurodykite klasę ypatybės $middleware pabaigoje.

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

Norėdami užregistruoti specifinę maršruto tarpinę programinę įrangą, pridėkite raktą ir reikšmę prie $routeMiddleware nuosavybės.

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

Mes sukūrėme Patikrinkite amžių ankstesniame pavyzdyje. Dabar galime tai užregistruoti tarpinės programinės įrangos maršruto nuosavybėje. Tokios registracijos kodas parodytas žemiau.

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

Tarpinės programinės įrangos parametrai

Taip pat galime perduoti parametrus su Middleware. 

Pavyzdžiui, jei jūsų programa turi skirtingus vaidmenis, pvz., naudotojo, administratoriaus, vyriausiojo administratoriaus ir kt. ir norite autentifikuoti veiksmą pagal vaidmenį, galite tai padaryti perduodami parametrus su tarpine programine įranga. 

Mūsų sukurtoje tarpinėje programinėje įrangoje yra ši funkcija, o po argumento galime perduoti pasirinktinius argumentus $kitas .

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

Dabar pabandykime nustatyti vaidmens parametrą naujai tarpinei programinei įrangai, kurią ketiname sukurti nuo nulio, tada pereikite prie vaidmens tarpinės programinės įrangos kūrimo vykdydami šią komandą

Pakeiskite rankenos metodą taip

<?php

namespace App\Http\Middleware;
use Closure;

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

pridėjome parametrą $roleo metodo viduje linija echo norėdami parašyti išvestį vaidmens pavadinimą.

Inovacijų naujienlaiškis
Nepraleiskite svarbiausių naujienų apie naujoves. Prisiregistruokite, kad gautumėte juos el.

Dabar užregistruokime „RoleMiddleware“ tarpinę programinę įrangą konkrečiam keliui

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

Dabar norėdami išbandyti tarpinę programinę įrangą su parametru, turime sukurti užklausą ir atsakymą. Norėdami imituoti atsakymą, sukurkime valdiklį, kurį vadinsime TestController

php artisan make:controller TestController --plain

ką tik įvykdyta komanda aplanke sukurs naują valdiklį app/Http/TestController.phpir pakeiskite metodą index su linija 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.";
   }
}

Nustačius atsakymą, užklausą sudarome redaguodami failą routes.phppridedant route role

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

šiuo metu galime išbandyti pavyzdį apsilankę URL http://localhost:8000/role

o naršyklėje matysime du echo

Role editor
Test Controller

Nutraukiama tarpinė programinė įranga

Il terminable Middleware atlieka kai kurias užduotis po to, kai atsakymas išsiunčiamas į naršyklę. Tai galima pasiekti naudojant šį metodą sukuriant tarpinę programinę įrangą baigti tarpinėje programinėje įrangoje. Il terminable Middleware turi būti registruotas middleware globalus. Metodas terminate gaus du argumentus $ užklausa e $atsakymas. 

Metodas Terminate turi būti sukurtas, kaip parodyta šiame kode.

php artisan make:middleware TerminateMiddleware

Kai bus sukurta tarpinė programinė įranga app/Http/Middleware/TerminateMiddleware.php pakeiskime kodą taip

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

šiuo atveju turime metodą handle ir metodas terminate su dviem parametrais $request e $response.

Dabar užregistruokime tarpinę programinę įrangą

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

Dabar turime sukurti valdiklį, kad imituotume atsakymą

php artisan make:controller XYZController --plain

keičiant klasės turinį

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

Dabar turime redaguoti failą routes/web.php pridedant maršrutus, reikalingus užklausai suaktyvinti

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

šiuo metu galime išbandyti pavyzdį apsilankę URL http://localhost:8000/terminate

o naršyklėje matysime tokias eilutes

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

Ercole Palmeri

Jums taip pat gali patikti:

Inovacijų naujienlaiškis
Nepraleiskite svarbiausių naujienų apie naujoves. Prisiregistruokite, kad gautumėte juos el.

Naujausi straipsniai

Veeam siūlo išsamiausią išpirkos reikalaujančių programų palaikymą – nuo ​​apsaugos iki atsako ir atkūrimo

„Coveware by Veeam“ ir toliau teiks reagavimo į kibernetinio turto prievartavimo incidentus paslaugas. „Coveware“ pasiūlys teismo ekspertizės ir ištaisymo galimybes…

23 balandis 2024

Žalioji ir skaitmeninė revoliucija: kaip numatoma priežiūra keičia naftos ir dujų pramonę

Nuspėjama priežiūra keičia naftos ir dujų sektorių, taikant naujovišką ir iniciatyvų požiūrį į gamyklų valdymą.…

22 balandis 2024

JK antimonopolinis reguliatorius kelia „BigTech“ aliarmą dėl „GenAI“.

JK CMA paskelbė įspėjimą dėl Big Tech elgesio dirbtinio intelekto rinkoje. Ten…

18 balandis 2024

Casa Green: energetikos revoliucija tvariai ateičiai Italijoje

„Žaliųjų namų“ dekretas, kurį Europos Sąjunga suformulavo siekiant padidinti pastatų energijos vartojimo efektyvumą, baigė teisėkūros procesą su…

18 balandis 2024