Artikels

Laravel middelware hoe dit werk

Laravel-middelware is 'n intermediêre toepassingslaag wat tussen die gebruiker se versoek en die toepassing se reaksie ingryp.

Dit beteken dat wanneer die gebruiker (Laravel-aansig) 'n versoek aan die bediener (Laravel-beheerder) rig, die versoek deur die middelware sal gaan. Op hierdie manier kan die middelware kyk of die versoek geverifieer is of nie: 

  • as die gebruiker se versoek geverifieer is, word die versoek na die agterkant gestuur;
  • as die gebruiker se versoek ongewaarmerk is, sal die middelware die gebruiker na die aanmeldskerm herlei.

Laravel laat jou toe defivoltooi en gebruik bykomende middelware om 'n verskeidenheid take uit te voer behalwe verifikasie. 

Laravel-middelware, soos verifikasie en CSRF-beskerming, is in die gids geleë app/Http/Middleware .

Ons kan dus sê dat die middelware 'n http-versoekfilter is, waardeur dit moontlik is om toestande te verifieer en aksies uit te voer.

Die skep van middelware

Om 'n nuwe middelware te skep, voer ons die volgende opdrag uit:

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

Ons skep die middleware en ons noem dit CheckAge, artisan sal ons soos volg antwoord:

Die venster hierbo wys dat die middelware suksesvol geskep is met die naam " Kontrole Ouderdom ".

Om te sien of die CheckAge-middelware geskep is of nie, gaan na die projek in die toepassing/Http/Middleware-lêergids, en jy sal die nuutgeskepte lêer sien

Die nuutgeskepte lêer het die volgende kode

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

Gebruik middelware

Om middelware te gebruik, moet ons dit registreer.

Daar is twee tipes middelware in Laravel:

  • Middleware globale
  • Route Middleware

Il globale middelware sal op elke HTTP-versoek van die toepassing uitgevoer word, terwyl die Roete Middleware sal aan 'n spesifieke pad toegewys word. Middelware kan geregistreer word by app/Http/Kernel.php. Hierdie lêer bevat twee eienskappe $middelware e $routeMiddleware . Die $middelware eiendom word gebruik om globale middelware en eienaarskap te registreer $routeMiddleware word gebruik om roetespesifieke middelware te registreer.

Om globale middelware te registreer, lys die klas aan die einde van die $middelware-eienskap.

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

Om roetespesifieke middelware te registreer, voeg die sleutel en waarde by die $routeMiddleware-eienskap.

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

Ons het geskep Kontrole Ouderdom in die vorige voorbeeld. Ons kan dit nou in die middelware-roete-eiendom registreer. Die kode vir so 'n registrasie word hieronder getoon.

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

Middelware parameters

Ons kan ook parameters met Middleware deurgee. 

Byvoorbeeld, as jou toepassing verskillende rolle het soos gebruiker, admin, super admin ens. en jy wil die aksie verifieer op grond van die rol, jy kan dit doen deur die parameters met die middelware deur te gee. 

Die middelware wat ons geskep het, bevat die volgende funksie, en ons kan pasgemaakte argumente na die argument deurgee $volgende .

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

Kom ons probeer nou om die rolparameter op 'n nuwe middelware te stel wat ons van nuuts af gaan skep, en gaan dan voort om Rolmiddelware te skep deur die volgende opdrag uit te voer

Verander die hanteermetode soos volg

<?php

namespace App\Http\Middleware;
use Closure;

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

ons het die parameter bygevoeg $role, en binne die metode die lyn echo om die uitvoer die naam van die rol te skryf.

Innovasie nuusbrief
Moenie die belangrikste nuus oor innovasie mis nie. Registreer om hulle per e-pos te ontvang.

Kom ons registreer nou die RoleMiddleware-middelware vir 'n spesifieke pad

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

Om nou die middelware met die parameter te toets, moet ons 'n versoek en 'n antwoord skep. Om die reaksie te simuleer, laat ons die kontroleerder skep wat ons TestController sal noem

php artisan make:controller TestController --plain

die opdrag wat sopas uitgevoer is, sal 'n nuwe kontroleerder in die gids skep app/Http/TestController.php, en verander die metode index met die lyn 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.";
   }
}

Nadat ons die antwoord opgestel het, bou ons die versoek deur die lêer te wysig routes.phpdeur die by te voeg route role

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

op hierdie punt kan ons die voorbeeld probeer deur die URL te besoek http://localhost:8000/role

en in die blaaier sal ons die twee sien echo

Role editor
Test Controller

Beëindigbare middelware

Il terminable Middleware voer sommige take uit nadat die antwoord na die blaaier gestuur is. Dit kan bereik word deur 'n middelware met die metode te skep eindig in die middelware. Il terminable Middleware moet geregistreer wees by die middleware wêreldwyd. Die metode terminate sal twee argumente ontvang $versoek e $reaksie. 

Die metode Terminate moet geskep word soos aangedui in die volgende kode.

php artisan make:middleware TerminateMiddleware

Sodra die middelware geskep is app/Http/Middleware/TerminateMiddleware.php kom ons verander die kode soos volg

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

in hierdie geval het ons 'n metode handle en 'n metode terminate met die twee parameters $request e $response.

Kom ons registreer nou die middelware

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

Nou moet ons die kontroleerder skep om die reaksie te simuleer

php artisan make:controller XYZController --plain

wysiging van die inhoud van die klas

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

Nou moet ons die lêer wysig routes/web.php die byvoeging van die roetes wat nodig is om die versoek te aktiveer

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

op hierdie punt kan ons die voorbeeld probeer deur die URL te besoek http://localhost:8000/terminate

en in die blaaier sal ons die volgende reëls sien

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

Ercole Palmeri

Miskien hou u ook van:

Innovasie nuusbrief
Moenie die belangrikste nuus oor innovasie mis nie. Registreer om hulle per e-pos te ontvang.

Onlangse artikels

Die toekoms is hier: hoe die verskepingsbedryf die wêreldekonomie revolusioneer

Die vlootsektor is 'n ware globale ekonomiese moondheid, wat na 'n 150 miljard-mark navigeer het ...

1 Mei 2024

Uitgewers en OpenAI onderteken ooreenkomste om die vloei van inligting wat deur Kunsmatige Intelligensie verwerk word, te reguleer

Verlede Maandag het die Financial Times 'n ooreenkoms met OpenAI aangekondig. FT lisensieer sy wêreldklas-joernalistiek ...

30 April 2024

Aanlynbetalings: Hier is hoe stroomdienste jou vir altyd laat betaal

Miljoene mense betaal vir stromingsdienste en betaal maandelikse intekengeld. Dit is algemene opinie dat jy...

29 April 2024

Veeam beskik oor die mees omvattende ondersteuning vir losprysware, van beskerming tot reaksie en herstel

Coveware deur Veeam sal voortgaan om reaksiedienste vir kuberafpersingsvoorvalle te verskaf. Coveware sal forensiese en remediëringsvermoëns bied ...

23 April 2024