Artikoli

Laravel middleware kif taħdem

Laravel middleware huwa saff intermedju ta' applikazzjoni li jintervjeni bejn it-talba tal-utent u r-rispons tal-applikazzjoni.

Dan ifisser li meta l-utent (vista Laravel) jagħmel talba lis-server (kontrollur Laravel), it-talba tgħaddi mill-middleware. B'dan il-mod il-middleware jista' jiċċekkja jekk it-talba hijiex awtentikata jew le: 

  • jekk it-talba tal-utent tkun awtentikata, it-talba tintbagħat lill-backend;
  • jekk it-talba tal-utent ma tkunx awtentikata, il-middleware jerġa' jidderieġi lill-utent lejn l-iskrin tal-login.

Laravel jippermettilek defitlesti u uża middleware addizzjonali biex twettaq varjetà ta 'kompiti ħlief l-awtentikazzjoni. 

Middlewares Laravel, bħall-awtentikazzjoni u l-protezzjoni CSRF, jinsabu fid-direttorju app/Http/Middleware .

Nistgħu għalhekk ngħidu li l-middleware huwa filtru ta 'talba http, li permezz tiegħu huwa possibbli li jiġu vverifikati l-kundizzjonijiet u jitwettqu azzjonijiet.

Il-ħolqien ta' middleware

Biex noħolqu middleware ġdid aħna nħaddmu l-kmand li ġej:

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

Noħolqu l- middleware u nsejħulha CheckAge, artisan se jwieġbuna kif ġej:

It-tieqa ta 'hawn fuq turi li l-middleware inħoloq b'suċċess bl-isem " CheckAge ".

Biex tara jekk il-middleware CheckAge jinħoloqx jew le, mur fil-proġett fil-folder app/Http/Middleware, u tara l-fajl li għadu kif inħoloq

Il-fajl maħluq ġdid għandu l-kodiċi li ġej

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

Uża middleware

Biex nużaw middleware, għandna bżonn nirreġistrawh.

Hemm żewġ tipi ta 'middleware f'Laravel:

  • Middleware globale
  • Route Middleware

Il middleware globali se jiġi eżegwit fuq kull talba HTTP mill-applikazzjoni, filwaqt li l- Rotta Middleware se jiġu assenjati għal mogħdija speċifika. Middleware jista' jiġi rreġistrat fuq app/Http/Kernel.php. Dan il-fajl fih żewġ proprjetajiet $middleware e $routeMiddleware . Il-proprjetà $ middleware jintuża biex jirreġistra middleware u sjieda globali $routeMiddleware jintuża biex jirreġistra middleware speċifiku għar-rotta.

Biex tirreġistra middleware globali, elenka l-klassi fl-aħħar tal-proprjetà $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,
    ];

Biex tirreġistra middleware speċifiku għar-rotta, żid iċ-ċavetta u l-valur mal-proprjetà $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,
    ];

Ħloqna CheckAge fl-eżempju preċedenti. Issa nistgħu nirreġistraw dan fil-proprjetà tar-rotta tal-middleware. Il-kodiċi għal tali reġistrazzjoni jidher hawn taħt.

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 middleware

Nistgħu wkoll ngħaddu parametri ma 'Middleware. 

Pereżempju, jekk l-applikazzjoni tiegħek għandha rwoli differenti bħal utent, admin, super admin eċċ. u trid tivverifika l-azzjoni bbażata fuq ir-rwol, tista 'tagħmel dan billi tgħaddi l-parametri mal-middleware. 

Il-middleware li ħloqna fih il-funzjoni li ġejja, u nistgħu ngħaddu argumenti personalizzati wara l-argument $li jmiss .

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

Issa ejja nippruvaw nissettjaw il-parametru tar-rwol għal middleware ġdid li se noħolqu mill-bidu nett, imbagħad ipproċedi biex noħolqu Role Middleware billi tħaddem il-kmand li ġej

Immodifika l-metodu tal-manku kif ġej

<?php

namespace App\Http\Middleware;
use Closure;

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

żidna l-parametru $role, u ġewwa l-metodu l-linja echo biex tikteb l-output l-isem tar-rwol.

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Issa ejja nirreġistraw il-middleware RoleMiddleware għal mogħdija speċifika

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

Issa biex nittestjaw il-middleware bil-parametru, irridu noħolqu talba u tweġiba. Biex tissimula r-rispons ejja noħolqu l-kontrollur li se nsejħu TestController

php artisan make:controller TestController --plain

il-kmand li għadu kemm ġie esegwit se joħloq kontrollur ġdid ġewwa l-folder app/Http/TestController.php, u ibdel il-metodu index mal-linja 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.";
   }
}

Wara li waqqaf ir-rispons, nibnu t-talba billi neditjaw il-fajl routes.phpbilli żżid il- route role

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

f'dan il-punt nistgħu nippruvaw l-eżempju billi nżuru l-URL http://localhost:8000/role

u fil-browser naraw it-tnejn echo

Role editor
Test Controller

Middleware Terminabbli

Il terminable Middleware iwettaq xi kompiti wara li r-rispons jintbagħat lill-browser. Dan jista 'jinkiseb billi jinħoloq middleware bil-metodu ittemm fil-middleware. Il terminable Middleware għandhom ikunu reġistrati mal- middleware globali. Il-metodu terminate se jirċievi żewġ argumenti $talba e $risposta. 

Il-metodu Terminate trid tinħoloq kif muri fil-kodiċi li ġej.

php artisan make:middleware TerminateMiddleware

Ladarba jinħoloq il-middleware app/Http/Middleware/TerminateMiddleware.php ejja timmodifika l-kodiċi kif ġej

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

f'dan il-każ għandna metodu handle u metodu terminate maż-żewġ parametri $request e $response.

Issa ejja nirreġistraw il-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,
    ];

Issa għandna bżonn noħolqu l-kontrollur biex jissimulaw ir-rispons

php artisan make:controller XYZController --plain

jimmodifika l-kontenut tal-klassi

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

Issa għandna bżonn neditjaw il-fajl routes/web.php iż-żieda tar-rotot meħtieġa biex tiġi attivata t-talba

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

f'dan il-punt nistgħu nippruvaw l-eżempju billi nżuru l-URL http://localhost:8000/terminate

u fil-browser naraw il-linji li ġejjin

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

Ercole Palmeri

Jista 'jkun li tixtieq ukoll:

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Artikoli riċenti

Il-Futur qiegħed Hawnhekk: Kif l-Industrija tat-Tbaħħir qed tirrivoluzzjona l-Ekonomija Globali

Is-settur navali huwa qawwa ekonomika globali vera, li navigat lejn suq ta’ 150 biljun...

1 Mejju 2024

Il-pubblikaturi u l-OpenAI jiffirmaw ftehimiet biex jirregolaw il-fluss tal-informazzjoni pproċessata mill-Intelliġenza Artifiċjali

It-Tnejn li għadda, il-Financial Times ħabbret ftehim mal-OpenAI. FT tagħti liċenzja għall-ġurnaliżmu ta’ klassi dinjija tagħha...

April 30 2024

Ħlasijiet Online: Hawn Kif Is-Servizzi ta' Streaming Jagħmel Inti Tħallas Għal Dejjem

Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...

April 29 2024

Veeam għandu l-aktar appoġġ komprensiv għar-ransomware, mill-protezzjoni għar-rispons u l-irkupru

Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...

April 23 2024