Članki

Vmesna programska oprema Laravel, kako deluje

Vmesna programska oprema Laravel je vmesna aplikacijska plast, ki posreduje med zahtevo uporabnika in odgovorom aplikacije.

To pomeni, da ko uporabnik (pogled Laravel) pošlje zahtevo strežniku (krmilnik Laravel), gre zahteva skozi vmesno programsko opremo. Na ta način lahko vmesna programska oprema preveri, ali je zahteva overjena ali ne: 

  • če je uporabnikova zahteva potrjena, se zahteva pošlje v zaledje;
  • če uporabnikova zahteva ni overjena, bo vmesna programska oprema uporabnika preusmerila na prijavni zaslon.

Laravel vam omogoča defidokončajte in uporabite dodatno vmesno programsko opremo za izvajanje različnih nalog razen preverjanja pristnosti. 

Vmesna programska oprema Laravel, kot sta avtentikacija in zaščita CSRF, se nahaja v imeniku app/Http/Middleware .

Lahko torej rečemo, da je vmesna programska oprema http filter filter, preko katerega je mogoče preverjati pogoje in izvajati akcije.

Ustvarjanje vmesne programske opreme

Za ustvarjanje nove vmesne programske opreme zaženemo naslednji ukaz:

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

Ustvarjamo middleware in ga imenujemo CheckAge, artisan nam bo odgovoril takole:

Zgornje okno kaže, da je bila vmesna programska oprema uspešno ustvarjena z imenom ” CheckAge ".

Če želite preveriti, ali je vmesna programska oprema CheckAge ustvarjena ali ne, pojdite na projekt v mapi app/Http/Middleware in videli boste novo ustvarjeno datoteko

Novo ustvarjena datoteka ima naslednjo kodo

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

Uporabite vmesno programsko opremo

Za uporabo vmesne programske opreme jo moramo registrirati.

V Laravel obstajata dve vrsti vmesne programske opreme:

  • Middleware globale
  • Route Middleware

Il globalna vmesna programska oprema bo izvedeno na vsako zahtevo HTTP iz aplikacije, medtem ko bo Vmesna programska oprema za usmerjanje bo dodeljen določeni poti. Vmesno programsko opremo lahko registrirate na app/Http/Kernel.php. Ta datoteka vsebuje dve lastnosti $vmesna programska oprema e $routeMiddleware . Lastnost $middleware se uporablja za registracijo globalne vmesne programske opreme in lastništva $routeMiddleware se uporablja za registracijo vmesne programske opreme, specifične za pot.

Če želite registrirati globalno vmesno programsko opremo, navedite razred na koncu lastnosti $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,
    ];

Če želite registrirati vmesno programsko opremo, specifično za pot, dodajte ključ in vrednost v lastnost $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,
    ];

Ustvarili smo CheckAge v prejšnjem primeru. Zdaj lahko to registriramo v lastnosti poti vmesne programske opreme. Koda za takšno registracijo je prikazana spodaj.

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

Parametri vmesne programske opreme

Parametre lahko posredujemo tudi s programsko opremo Middleware. 

Na primer, če ima vaša aplikacija različne vloge, kot so uporabnik, skrbnik, superskrbnik itd. in želite preveriti pristnost dejanja na podlagi vloge, lahko to storite tako, da posredujete parametre z vmesno programsko opremo. 

Vmesna programska oprema, ki smo jo ustvarili, vsebuje naslednjo funkcijo in za argumentom lahko posredujemo argumente po meri $naslednji .

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

Zdaj pa poskusimo nastaviti parameter vloge na novo vmesno programsko opremo, ki jo bomo ustvarili iz nič, nato pa nadaljujte z ustvarjanjem vmesne programske opreme z zagonom naslednjega ukaza

Spremenite način ročaja, kot sledi

<?php

namespace App\Http\Middleware;
use Closure;

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

dodali smo parameter $role, znotraj metode pa vrstica echo da napišete izhod ime vloge.

Glasilo o inovacijah
Ne zamudite najpomembnejših novic o inovacijah. Prijavite se, če jih želite prejemati po e-pošti.

Zdaj pa registrirajmo vmesno programsko opremo RoleMiddleware za določeno pot

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

Zdaj, da preizkusimo vmesno programsko opremo s parametrom, moramo ustvariti zahtevo in odgovor. Za simulacijo odziva ustvarimo krmilnik, ki ga bomo imenovali TestController

php artisan make:controller TestController --plain

pravkar izveden ukaz bo ustvaril nov krmilnik znotraj mape app/Http/TestController.phpin spremenite način index s črto 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.";
   }
}

Po nastavitvi odgovora sestavimo zahtevo z urejanjem datoteke routes.phpz dodajanjem route role

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

na tej točki lahko preizkusimo primer tako, da obiščemo URL http://localhost:8000/role

in v brskalniku bomo videli oba echo

Role editor
Test Controller

Končna vmesna programska oprema

Il terminable Middleware izvede nekaj nalog, potem ko je odgovor poslan v brskalnik. To je mogoče doseči z ustvarjanjem vmesne programske opreme z metodo zaključijo v vmesni programski opremi. Il terminable Middleware mora biti registriran pri middleware globalno. Metoda terminate bo prejel dva argumenta $request e $odziv. 

Metoda Terminate je treba ustvariti, kot je prikazano v naslednji kodi.

php artisan make:middleware TerminateMiddleware

Ko je vmesna programska oprema ustvarjena app/Http/Middleware/TerminateMiddleware.php spremenimo kodo na naslednji način

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

v tem primeru imamo metodo handle in metoda terminate z obema parametroma $request e $response.

Zdaj pa registrirajmo 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,
    ];

Zdaj moramo ustvariti krmilnik za simulacijo odziva

php artisan make:controller XYZController --plain

spreminjanje vsebine razreda

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

Zdaj moramo urediti datoteko routes/web.php dodajanje poti, potrebnih za aktiviranje zahteve

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

na tej točki lahko preizkusimo primer tako, da obiščemo URL http://localhost:8000/terminate

in v brskalniku bomo videli naslednje vrstice

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

Ercole Palmeri

Morda vam bo všeč tudi:

Glasilo o inovacijah
Ne zamudite najpomembnejših novic o inovacijah. Prijavite se, če jih želite prejemati po e-pošti.

Nedavni članki

Inovativna intervencija v obogateni resničnosti z Apple viewerjem na polikliniki Catania

Operacija oftalmoplastike s komercialnim pregledovalnikom Apple Vision Pro je bila opravljena na polikliniki Catania…

3 maja 2024

Prednosti pobarvank za otroke - svet čarovnije za vse starosti

Razvijanje finih motoričnih spretnosti z barvanjem otroke pripravi na kompleksnejše spretnosti, kot je pisanje. Za barvanje…

2 maja 2024

Prihodnost je tukaj: Kako ladjarska industrija revolucionira svetovno gospodarstvo

Pomorski sektor je prava svetovna gospodarska sila, ki je krmarila proti 150 milijardnemu trgu...

1 maja 2024

Založniki in OpenAI podpisujejo sporazume za urejanje pretoka informacij, ki jih obdeluje umetna inteligenca

Prejšnji ponedeljek je Financial Times objavil dogovor z OpenAI. FT licencira svoje vrhunsko novinarstvo ...

April 30 2024