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

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

Rivoluzzjoni Ekoloġika u Diġitali: Kif il-Manutenzjoni Predittiva qed tittrasforma l-Industrija taż-Żejt u l-Gass

Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...

April 22 2024

Ir-regolatur tal-antitrust tar-Renju Unit iqajjem allarm ta’ BigTech fuq GenAI

Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…

April 18 2024

Casa Green: rivoluzzjoni tal-enerġija għal futur sostenibbli fl-Italja

Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...

April 18 2024