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

Vaikų spalvinimo puslapių privalumai – magijos pasaulis įvairaus amžiaus žmonėms

Lavindami smulkiosios motorikos įgūdžius dažydami, vaikai paruošiami sudėtingesniems įgūdžiams, pavyzdžiui, rašymui. Norėdami nuspalvinti…

2 gegužės 2024

Ateitis yra čia: kaip laivybos pramonė sukelia pasaulinės ekonomikos revoliuciją

Karinio jūrų laivyno sektorius yra tikra pasaulinė ekonominė galia, kuri pasiekė 150 mlrd.

1 gegužės 2024

Leidėjai ir OpenAI pasirašo sutartis dėl dirbtinio intelekto apdorojamos informacijos srauto reguliavimo

Praėjusį pirmadienį „Financial Times“ paskelbė apie susitarimą su „OpenAI“. FT licencijuoja savo pasaulinio lygio žurnalistiką…

30 balandis 2024

Mokėjimai internetu: štai kaip srautinio perdavimo paslaugos priverčia mokėti amžinai

Milijonai žmonių moka už srautinio perdavimo paslaugas, mokėdami mėnesinius abonentinius mokesčius. Paplitusi nuomonė, kad jūs…

29 balandis 2024