Artikuj

Si funksionon Laravel Middleware

Laravel middleware është një shtresë e ndërmjetme aplikacioni që ndërhyn midis kërkesës së përdoruesit dhe përgjigjes së aplikacionit.

Kjo do të thotë që kur përdoruesi (pamja Laravel) i bën një kërkesë serverit (kontrolluesi Laravel), kërkesa do të kalojë përmes programit të mesëm. Në këtë mënyrë, softueri i mesëm mund të kontrollojë nëse kërkesa është vërtetuar apo jo: 

  • nëse kërkesa e përdoruesit është vërtetuar, kërkesa dërgohet në backend;
  • nëse kërkesa e përdoruesit është e paautentikuar, programi i mesëm do ta ridrejtojë përdoruesin në ekranin e identifikimit.

Laravel ju lejon defipërfundoni dhe përdorni programe të mesme shtesë për të kryer një sërë detyrash, përveç vërtetimit. 

Programet e mesme Laravel, të tilla si vërtetimi dhe mbrojtja CSRF, janë të vendosura në drejtori aplikacion/Http/Middleware .

Prandaj mund të themi se softueri i mesëm është një filtër i kërkesës http, përmes të cilit është e mundur të verifikohen kushtet dhe të kryhen veprime.

Krijimi i programeve të mesme

Për të krijuar një softuer të ri, ne ekzekutojmë komandën e mëposhtme:

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

Ne krijojmë middleware dhe ne e quajmë atë CheckAge, artisan do të na përgjigjet si më poshtë:

Dritarja e mësipërme tregon se programi i mesëm është krijuar me sukses me emrin " Mosha e Kontrollit ".

Për të parë nëse programi i ndërmjetëm CheckAge është krijuar apo jo, shkoni te projekti në dosjen app/Http/Middleware dhe do të shihni skedarin e krijuar rishtazi.

Skedari i krijuar rishtazi ka kodin e mëposhtëm

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

Përdorni programin e mesëm

Për të përdorur programin e mesëm, duhet ta regjistrojmë atë.

Ekzistojnë dy lloje të programeve të mesme në Laravel:

  • Middleware globale
  • Route Middleware

Il softuer i mesëm global do të ekzekutohet në çdo kërkesë HTTP nga aplikacioni, ndërsa Route Middleware do të caktohet në një rrugë specifike. Middleware mund të regjistrohet në app/Http/Kernel.php. Ky skedar përmban dy veti $middleware e $routeMiddleware . Vetia $middleware përdoret për të regjistruar softuerin dhe pronësinë globale $routeMiddleware përdoret për të regjistruar softuerin e mesëm specifik të rrugës.

Për të regjistruar softuerin global të mesëm, renditni klasën në fund të veçorisë $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,
    ];

Për të regjistruar softuerin e mesëm specifik të rrugës, shtoni çelësin dhe vlerën në vetinë $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,
    ];

Ne krijuam Mosha e Kontrollit në shembullin e mëparshëm. Tani mund ta regjistrojmë këtë në pronën e rrugës së ndërmjetme. Kodi për një regjistrim të tillë tregohet më poshtë.

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

Parametrat e Middleware

Mund të kalojmë edhe parametra me Middleware. 

Për shembull, nëse aplikacioni juaj ka role të ndryshme si përdorues, administrator, super administrator etj. dhe dëshironi të vërtetoni veprimin në bazë të rolit, mund ta bëni duke kaluar parametrat me programin e mesëm. 

Softueri i mesëm që krijuam përmban funksionin e mëposhtëm, dhe ne mund të kalojmë argumente të personalizuara pas argumentit $ tjetër .

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

Tani le të përpiqemi të vendosim parametrin e rolit në një program të ri të mesëm që do të krijojmë nga e para, më pas të vazhdojmë të krijojmë Role Middleware duke ekzekutuar komandën e mëposhtme

Ndryshoni metodën e dorezës si më poshtë

<?php

namespace App\Http\Middleware;
use Closure;

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

kemi shtuar parametrin $role, dhe brenda metodës vijën echo për të shkruar në dalje emrin e rolit.

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.

Tani le të regjistrojmë programin ndërmjetës RoleMiddleware për një rrugë specifike

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

Tani për të testuar programin e mesëm me parametrin, duhet të krijojmë një kërkesë dhe një përgjigje. Për të simuluar përgjigjen, le të krijojmë kontrolluesin që do ta quajmë TestController

php artisan make:controller TestController --plain

komanda e sapo ekzekutuar do të krijojë një kontrollues të ri brenda dosjes app/Http/TestController.php, dhe ndryshoni metodën index me linjën 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.";
   }
}

Pas konfigurimit të përgjigjes, ne ndërtojmë kërkesën duke redaktuar skedarin routes.phpduke shtuar route role

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

në këtë pikë mund të provojmë shembullin duke vizituar URL-në http://localhost:8000/role

dhe në shfletues do t'i shohim të dy echo

Role editor
Test Controller

Middleware i përfundimueshëm

Il terminable Middleware kryen disa detyra pasi përgjigja dërgohet në shfletues. Kjo mund të arrihet duke krijuar një program ndërmjetës me metodën përfundon në programin e mesëm. Il terminable Middleware duhet të regjistrohen me middleware globale. Metoda terminate do të marrë dy argumente $kërkesë e $përgjigje. 

Metoda Terminate duhet të krijohet siç tregohet në kodin e mëposhtëm.

php artisan make:middleware TerminateMiddleware

Pasi të krijohet softueri i mesëm app/Http/Middleware/TerminateMiddleware.php le të modifikojmë kodin si më poshtë

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

në këtë rast kemi një metodë handle dhe një metodë terminate me dy parametrat $request e $response.

Tani le të regjistrojmë 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,
    ];

Tani duhet të krijojmë kontrolluesin për të simuluar përgjigjen

php artisan make:controller XYZController --plain

duke modifikuar përmbajtjen e klasës

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

Tani duhet të modifikojmë skedarin routes/web.php duke shtuar rrugët e nevojshme për të aktivizuar kërkesën

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

në këtë pikë mund të provojmë shembullin duke vizituar URL-në http://localhost:8000/terminate

dhe në shfletues do të shohim rreshtat e mëposhtëm

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

Ercole Palmeri

Ju gjithashtu mund të dëshironi:

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.

Artikujt e fundit

Ndërhyrje novatore në realitetin e shtuar, me një shikues Apple në Poliklinikën Catania

Një operacion oftalmoplastik duke përdorur shikuesin komercial Apple Vision Pro u krye në Poliklinikën Catania…

3 Maj 2024

Përfitimet e Faqeve të Ngjyrosjes për Fëmijë - një botë magjike për të gjitha moshat

Zhvillimi i aftësive të shkëlqyera motorike përmes ngjyrosjes i përgatit fëmijët për aftësi më komplekse si shkrimi. Për të ngjyrosur…

2 Maj 2024

E ardhmja është këtu: Si industria e transportit po revolucionarizon ekonominë globale

Sektori detar është një fuqi e vërtetë ekonomike globale, e cila ka lundruar drejt një tregu prej 150 miliardë...

1 Maj 2024

Botuesit dhe OpenAI nënshkruajnë marrëveshje për të rregulluar rrjedhën e informacionit të përpunuar nga Inteligjenca Artificiale

Të hënën e kaluar, Financial Times njoftoi një marrëveshje me OpenAI. FT licencon gazetarinë e saj të klasit botëror…

30 Prill 2024