Artiklid

Laraveli vahevara, kuidas see töötab

Laraveli vahevara on vahepealne rakenduskiht, mis sekkub kasutaja päringu ja rakenduse vastuse vahele.

See tähendab, et kui kasutaja (Laraveli vaade) teeb päringu serverile (Laraveli kontroller), läheb päring läbi vahevara. Nii saab vahevara kontrollida, kas päring on autentitud või mitte: 

  • kui kasutaja päring on autentitud, saadetakse päring taustaprogrammi;
  • kui kasutaja päring on autentimata, suunab vahevara kasutaja sisselogimiskuvale.

Laravel lubab teil seda teha defilõpetage ja kasutage täiendavat vahevara mitmesuguste toimingute tegemiseks, välja arvatud autentimine. 

Laraveli vahevara, nagu autentimine ja CSRF-kaitse, asuvad kataloogis rakendus/Http/Middleware .

Seega võime öelda, et vahevara on http päringu filter, mille kaudu on võimalik tingimusi kontrollida ja toiminguid teha.

Vahevara loomine

Uue vahevara loomiseks käivitame järgmise käsu:

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

Me loome middleware ja me kutsume seda CheckAge, artisan vastab meile järgmiselt:

Ülaltoodud aken näitab, et vahevara on edukalt loodud nimega " Kontrolli vanust ".

Et näha, kas CheckAge'i vahevara on loodud või mitte, minge projekti juurde kaustas app/Http/Middleware ja näete vastloodud faili

Uuel failil on järgmine kood

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

Kasutage vahevara

Vahevara kasutamiseks peame selle registreerima.

Laravelis on kahte tüüpi vahevara:

  • Middleware globale
  • Route Middleware

Il globaalne vahevara käivitatakse iga rakenduse HTTP-päringu korral, samal ajal kui Marsruudi vahevara määratakse kindlale teele. Vahevara saab registreerida aadressil app/Http/Kernel.php. See fail sisaldab kahte atribuuti $vahevara e $routeMiddleware . $middleware atribuut kasutatakse ülemaailmse vahevara ja omandiõiguse registreerimiseks $routeMiddleware kasutatakse marsruudipõhise vahevara registreerimiseks.

Globaalse vahevara registreerimiseks loetlege klass atribuudi $middleware lõpus.

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

Marsruudipõhise vahevara registreerimiseks lisage võti ja väärtus atribuudile $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,
    ];

Meie lõime Kontrolli vanust eelmises näites. Nüüd saame selle registreerida vahevara marsruudi atribuudis. Sellise registreerimise kood on näidatud allpool.

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

Vahevara parameetrid

Saame parameetreid edastada ka vahevaraga. 

Näiteks kui teie rakendusel on erinevad rollid, nagu kasutaja, administraator, superadministraator jne. ja soovite toimingut rolli alusel autentida, saate seda teha vahevaraga parameetrite edastamisega. 

Meie loodud vahevara sisaldab järgmist funktsiooni ja argumendi järel saame edastada kohandatud argumendid $järgmine .

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

Nüüd proovime määrata rolli parameetri uuele vahevarale, mille hakkame nullist looma, seejärel jätkake rolli vahevara loomist, käivitades järgmise käsu

Muutke käepideme meetodit järgmiselt

<?php

namespace App\Http\Middleware;
use Closure;

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

lisasime parameetri $roleja meetodi sees rida echo et kirjutada väljundisse rolli nimi.

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.

Nüüd registreerime RoleMiddleware vahevara konkreetse tee jaoks

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

Nüüd, et testida vahevara parameetriga, peame looma päringu ja vastuse. Vastuse simuleerimiseks loome kontrolleri, mida kutsume TestControlleriks

php artisan make:controller TestController --plain

äsja käivitatud käsk loob kaustas uue kontrolleri app/Http/TestController.phpja muutke meetodit index joonega 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.";
   }
}

Pärast vastuse seadistamist koostame päringu faili redigeerimise teel routes.phplisades route role

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

siinkohal saame näidet proovida, külastades URL-i http://localhost:8000/role

ja brauseris näeme neid kahte echo

Role editor
Test Controller

Lõpetatav vahevara

Il terminable Middleware täidab mõned toimingud pärast vastuse saatmist brauserisse. Seda saab saavutada meetodiga vahevara loomisega lõpetada vahevaras. Il terminable Middleware tuleb registreerida middleware globaalne. Meetod terminate saab kaks argumenti $taotlus e $vastus. 

Meetod Terminate tuleb luua, nagu on näidatud järgmises koodis.

php artisan make:middleware TerminateMiddleware

Kui vahevara on loodud app/Http/Middleware/TerminateMiddleware.php muudame koodi järgmiselt

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

sel juhul on meil meetod handle ja meetod terminate kahe parameetriga $request e $response.

Nüüd registreerime vahevara

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

Nüüd peame vastuse simuleerimiseks looma kontrolleri

php artisan make:controller XYZController --plain

klassi sisu muutmine

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

Nüüd peame faili redigeerima routes/web.php päringu aktiveerimiseks vajalike marsruutide lisamine

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

siinkohal saame näidet proovida, külastades URL-i http://localhost:8000/terminate

ja brauseris näeme järgmisi ridu

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

Ercole Palmeri

Teile võiksid meeldida ka:

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.

Viimased artiklid

Smart Lock Market: avaldatud turu-uuringute aruanne

Mõiste Smart Lock Market viitab tootmist, levitamist ja kasutamist ümbritsevale tööstusele ja ökosüsteemile…

Märtsil 27 2024

Mis on disainimustrid: miks neid kasutada, klassifikatsioon, plussid ja miinused

Tarkvaratehnikas on disainimustrid optimaalsed lahendused probleemidele, mis tarkvara kujundamisel tavaliselt esinevad. Ma olen nagu…

Märtsil 26 2024

Tööstusliku märgistuse tehnoloogiline areng

Tööstuslik märgistus on lai mõiste, mis hõlmab mitmeid tehnikaid, mida kasutatakse püsivate märkide loomiseks ...

Märtsil 25 2024

VBA-ga kirjutatud Exceli makrode näited

Järgmised lihtsad Exceli makronäited on kirjutatud VBA-ga hinnanguline lugemisaeg: 3 minutit Näide…

Märtsil 25 2024