Dette betyr at når brukeren (Laravel-visning) sender en forespørsel til serveren (Laravel-kontrolleren), vil forespørselen gå gjennom mellomvaren. På denne måten kan mellomvaren sjekke om forespørselen er autentisert eller ikke:
Laravel lar deg defifullfør og bruk ekstra mellomvare for å utføre en rekke oppgaver bortsett fra autentisering.
Laravel-mellomvare, som autentisering og CSRF-beskyttelse, er plassert i katalogen app/Http/Middelvare .
Vi kan derfor si at mellomvaren er et http-forespørselsfilter, der det er mulig å verifisere forhold og utføre handlinger.
For å lage en ny mellomvare kjører vi følgende kommando:
php artisan make:middleware <name-of-middleware>
Vi skaper middleware
og vi kaller det CheckAge
, artisan
vil svare oss som følger:
Vinduet ovenfor viser at mellomvaren har blitt opprettet med navnet " SjekkAlder ".
For å se om CheckAge-mellomvaren er opprettet eller ikke, gå til prosjektet i app/Http/Middleware-mappen, og du vil se den nyopprettede filen
Den nyopprettede filen har følgende 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);
}
}
For å bruke mellomvare må vi registrere den.
Det er to typer mellomvare i Laravel:
Middleware globale
Route Middleware
Il global mellomvare vil bli utført på hver HTTP-forespørsel fra applikasjonen, mens Rute mellomvare vil bli tildelt en bestemt bane. Mellomvare kan registreres på app/Http/Kernel.php. Denne filen inneholder to egenskaper $mellomvare e $routeMiddleware . $middleware-eiendommen brukes til å registrere global mellomvare og eierskap $routeMiddleware brukes til å registrere rutespesifikk mellomvare.
For å registrere global mellomvare, oppgi klassen på slutten av egenskapen $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,
];
For å registrere rutespesifikk mellomvare, legg til nøkkelen og verdien til $routeMiddleware-egenskapen.
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,
];
Vi skapte SjekkAlder i forrige eksempel. Vi kan nå registrere dette i ruteegenskapen mellomvare. Koden for en slik registrering er vist nedenfor.
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,
];
Vi kan også sende parametere med mellomvare.
For eksempel, hvis applikasjonen din har forskjellige roller som bruker, admin, superadmin osv. og du ønsker å autentisere handlingen basert på rollen, kan du gjøre det ved å sende parametrene med mellomvaren.
Mellomvaren vi opprettet inneholder følgende funksjon, og vi kan sende tilpassede argumenter etter argumentet $neste .
public function handle($request, Closure $next)
{
return $next($request);
}
La oss nå prøve å sette rolleparameteren til en ny mellomvare som vi skal lage fra bunnen av, og fortsett deretter med å lage rollemellomvare ved å kjøre følgende kommando
Endre håndtaksmetoden som følger
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
vi la til parameteren $role
, og inne i metoden linjen echo
for å skrive utgangen navnet på rollen.
La oss nå registrere RoleMiddleware-mellomvaren for en bestemt bane
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å for å teste mellomvaren med parameteren, må vi lage en forespørsel og et svar. For å simulere responsen, la oss lage kontrolleren som vi vil kalle TestController
php artisan make:controller TestController --plain
kommandoen som nettopp ble utført vil opprette en ny kontroller inne i mappen app/Http/TestController.php
, og endre metoden index
med linjen 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.";
}
}
Etter å ha satt opp svaret, bygger vi forespørselen ved å redigere filen routes.php
ved å legge til route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
på dette tidspunktet kan vi prøve eksemplet ved å gå til URL-en http://localhost:8000/role
og i nettleseren vil vi se de to echo
Role editor
Test Controller
Il terminable Middleware
utfører noen oppgaver etter at svaret er sendt til nettleseren. Dette kan oppnås ved å lage en mellomvare med metoden avsluttes i mellomvaren. Il terminable Middleware
må være registrert hos middleware
global. Metoden terminate
vil motta to argumenter $ forespørsel e $respons.
Metoden Terminate
må opprettes som vist i følgende kode.
php artisan make:middleware TerminateMiddleware
Når mellomvaren er opprettet app/Http/Middleware/TerminateMiddleware.php
la oss endre koden som følger
<?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.";
}
}
i dette tilfellet har vi en metode handle
og en metode terminate
med de to parameterne $request
e $response
.
La oss nå registrere mellomvaren
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å må vi lage kontrolleren for å simulere responsen
php artisan make:controller XYZController --plain
endre innholdet i klassen
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Nå må vi redigere filen routes/web.php
legge til rutene som trengs for å aktivere forespørselen
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
på dette tidspunktet kan vi prøve eksemplet ved å gå til URL-en http://localhost:8000/terminate
og i nettleseren vil vi se følgende linjer
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Du vil kanskje også like:
Coveware by Veeam vil fortsette å tilby responstjenester for cyberutpressing. Coveware vil tilby kriminaltekniske og utbedringsmuligheter...
Prediktivt vedlikehold revolusjonerer olje- og gasssektoren, med en innovativ og proaktiv tilnærming til anleggsledelse...
UK CMA har utstedt en advarsel om Big Techs oppførsel i markedet for kunstig intelligens. Der…
"Green Houses"-dekretet, formulert av EU for å forbedre energieffektiviteten til bygninger, har avsluttet sin lovgivningsprosess med...