Članci

Laravel Middleware kako radi

Laravel Middleware je srednji sloj aplikacije koji intervenira između zahtjeva korisnika i odgovora aplikacije.

To znači da kada korisnik (Laravel pogled) uputi zahtjev serveru (Laravel kontroler), zahtjev će proći kroz međuopremu. Na ovaj način srednji softver može provjeriti je li zahtjev autentificiran ili ne: 

  • ako je zahtjev korisnika autentificiran, zahtjev se šalje backendu;
  • ako korisnikov zahtjev nije autentificiran, srednji softver će preusmjeriti korisnika na ekran za prijavu.

Laravel vam to omogućava defiuključite i koristite dodatni međuverski softver za obavljanje raznih zadataka osim provjere autentičnosti. 

Laravel međuprogrami, kao što su autentikacija i CSRF zaštita, nalaze se u direktoriju app/Http/Middleware .

Stoga možemo reći da je međuvera filter http zahtjeva, preko kojeg je moguće provjeriti uvjete i izvršiti radnje.

Kreiranje srednjeg softvera

Za kreiranje novog međuvera pokrećemo sljedeću naredbu:

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

Mi kreiramo middleware i mi to zovemo CheckAge, artisan će nam odgovoriti na sljedeći način:

Prozor iznad pokazuje da je srednji softver uspješno kreiran sa imenom ” CheckAge ".

Da vidite da li je međuvera CheckAge kreirana ili ne, idite na projekat u folderu app/Http/Middleware i vidjet ćete novokreiranu datoteku

Novokreirana datoteka ima sljedeći kod

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

Koristite srednji softver

Da bismo koristili srednji softver, moramo ga registrirati.

Postoje dvije vrste međuvera u Laravelu:

  • Middleware globale
  • Route Middleware

Il globalni srednji softver će se izvršiti na svakom HTTP zahtjevu iz aplikacije, dok će se Route Middleware će biti dodijeljen određenoj putanji. Middleware se može registrovati na app/Http/Kernel.php. Ova datoteka sadrži dva svojstva $middleware e $routeMiddleware . Svojstvo $middleware koristi se za registraciju globalnog međuvera i vlasništva $routeMiddleware koristi se za registraciju srednjeg softvera specifičnog za rutu.

Za registraciju globalnog međuvera, navedite klasu na kraju svojstva $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,
    ];

Da biste registrirali međuopremu specifičnu za rutu, dodajte ključ i vrijednost svojstvu $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,
    ];

Stvorili smo CheckAge u prethodnom primjeru. Sada ovo možemo registrirati u svojstvu rute međuvera. Kod za takvu registraciju je prikazan ispod.

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 srednjeg softvera

Također možemo proslijediti parametre s Middleware-om. 

Na primjer, ako vaša aplikacija ima različite uloge kao što su korisnik, administrator, super administrator itd. a želite da potvrdite autentičnost radnje na osnovu uloge, to možete učiniti tako što ćete proslijediti parametre s međuvera. 

Međuover koji smo kreirali sadrži sljedeću funkciju i možemo proslijediti prilagođene argumente nakon argumenta $sljedeći .

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

Pokušajmo sada postaviti parametar uloge na novi međuover koji ćemo kreirati od nule, a zatim nastavite sa kreiranjem međuvera uloge pokretanjem sljedeće naredbe

Modificirajte metodu ručke na sljedeći način

<?php

namespace App\Http\Middleware;
use Closure;

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

dodali smo parametar $role, a unutar metode linija echo da napišete na izlazu ime uloge.

Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

Sada registrirajmo RoleMiddleware middleware za određenu putanju

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

Sada da bismo testirali srednji softver sa parametrom, moramo kreirati zahtjev i odgovor. Da bismo simulirali odgovor kreirajmo kontroler koji ćemo nazvati TestController

php artisan make:controller TestController --plain

upravo izvršena komanda će kreirati novi kontroler unutar fascikle app/Http/TestController.php, i promijenite metodu index sa linijom 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.";
   }
}

Nakon postavljanja odgovora, gradimo zahtjev uređivanjem datoteke routes.phpdodavanjem route role

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

u ovom trenutku možemo isprobati primjer posjetom URL-u http://localhost:8000/role

a u pretraživaču ćemo vidjeti to dvoje echo

Role editor
Test Controller

Terminable Middleware

Il terminable Middleware obavlja neke zadatke nakon što se odgovor pošalje pretraživaču. Ovo se može postići kreiranjem međuvera sa metodom završiti u međuveru. Il terminable Middleware moraju biti registrovani kod middleware globalno. Metoda terminate dobiće dva argumenta $request e $response. 

Metoda Terminate mora biti kreiran kao što je prikazano u sljedećem kodu.

php artisan make:middleware TerminateMiddleware

Jednom kada je srednji softver kreiran app/Http/Middleware/TerminateMiddleware.php izmenimo kod na sledeći 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.";
   }
}

u ovom slučaju imamo metodu handle i metod terminate sa dva parametra $request e $response.

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

Sada moramo kreirati kontroler da simulira odgovor

php artisan make:controller XYZController --plain

modificiranje sadržaja klase

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

Sada moramo urediti fajl routes/web.php dodavanje ruta potrebnih za aktiviranje zahtjeva

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

u ovom trenutku možemo isprobati primjer posjetom URL-u http://localhost:8000/terminate

a u pretraživaču ćemo vidjeti sljedeće redove

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

Ercole Palmeri

Možda će vam se takođe svidjeti:

Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

Nedavni članak

Veeam nudi najsveobuhvatniju podršku za ransomware, od zaštite do odgovora i oporavka

Coveware od strane Veeam-a će nastaviti da pruža usluge odgovora na incidente u slučaju sajber iznude. Coveware će ponuditi mogućnosti forenzike i sanacije…

23 april 2024

Zelena i digitalna revolucija: Kako prediktivno održavanje transformira industriju nafte i plina

Prediktivno održavanje revolucionira sektor nafte i plina, s inovativnim i proaktivnim pristupom upravljanju postrojenjima.…

22 april 2024

Britanski antimonopolski regulator podigao je BigTech uzbunu zbog GenAI

UK CMA izdao je upozorenje o ponašanju Big Tech-a na tržištu umjetne inteligencije. Tamo…

18 april 2024

Casa Green: energetska revolucija za održivu budućnost u Italiji

Uredba o „zelenim kućama“, koju je formulisala Evropska unija za poboljšanje energetske efikasnosti zgrada, završila je svoj zakonodavni proces sa…

18 april 2024