Detta innebär att när användaren (Laravel-vyn) gör en förfrågan till servern (Laravel-kontrollern), kommer begäran att gå genom mellanvaran. På så sätt kan mellanvaran kontrollera om begäran är autentiserad eller inte:
Laravel låter dig defiavsluta och använda ytterligare mellanprogram för att utföra en mängd olika uppgifter förutom autentisering.
Laravel-mellanprogram, såsom autentisering och CSRF-skydd, finns i katalogen app/Http/Middleware .
Vi kan därför säga att mellanvaran är ett http-begäranfilter, genom vilket det är möjligt att verifiera villkor och utföra åtgärder.
För att skapa en ny mellanprogram kör vi följande kommando:
php artisan make:middleware <name-of-middleware>
Vi skapar middleware
och vi kallar det CheckAge
, artisan
kommer att svara oss enligt följande:
Fönstret ovan visar att mellanvaran har skapats framgångsrikt med namnet ” CheckAge ".
För att se om CheckAge-mellanvaran är skapad eller inte, gå till projektet i mappen app/Http/Middleware så ser du den nyskapade filen
Den nyskapade filen har följande kod
<?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);
}
}
För att använda middleware måste vi registrera den.
Det finns två typer av mellanprogram i Laravel:
Middleware globale
Route Middleware
Il global mellanvara kommer att köras på varje HTTP-begäran från applikationen, medan Route Middleware kommer att tilldelas en specifik väg. Mellanvara kan registreras på app/Http/Kernel.php. Den här filen innehåller två egenskaper $mellanvara e $routeMiddleware . Egenskapen $middleware används för att registrera global mellanvara och ägande $routeMiddleware används för att registrera ruttspecifik middleware.
För att registrera global middleware, lista klassen i slutet av $middleware-egenskapen.
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,
];
För att registrera ruttspecifik middleware, lägg till nyckeln och värdet i egenskapen $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,
];
Vi skapade CheckAge i föregående exempel. Vi kan nu registrera detta i middleware route-egenskapen. Koden för en sådan registrering visas nedan.
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 även skicka parametrar med Middleware.
Till exempel, om din applikation har olika roller som användare, admin, superadmin etc. och du vill autentisera åtgärden baserat på rollen kan du göra det genom att skicka parametrarna med mellanvaran.
Mellanvaran vi skapade innehåller följande funktion, och vi kan skicka anpassade argument efter argumentet $nästa .
public function handle($request, Closure $next)
{
return $next($request);
}
Låt oss nu försöka ställa in rollparametern till en ny mellanprogram som vi ska skapa från början, fortsätt sedan med att skapa Rollmellanvara genom att köra följande kommando
Ändra hanteringsmetoden enligt följande
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
vi lade till parametern $role
, och inuti metoden linjen echo
för att skriva utgången namnet på rollen.
Låt oss nu registrera RoleMiddleware-mellanvaran för en specifik sökväg
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,
];
För att nu testa mellanvaran med parametern måste vi skapa en begäran och ett svar. För att simulera svaret låt oss skapa styrenheten som vi kommer att kalla TestController
php artisan make:controller TestController --plain
kommandot som just körs skapar en ny styrenhet i mappen app/Http/TestController.php
och ändra metoden index
med linan 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.";
}
}
Efter att ha ställt in svaret bygger vi begäran genom att redigera filen routes.php
genom att lägga till route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
vid det här laget kan vi prova exemplet genom att besöka URL:en http://localhost:8000/role
och i webbläsaren kommer vi att se de två echo
Role editor
Test Controller
Il terminable Middleware
utför vissa uppgifter efter att svaret har skickats till webbläsaren. Detta kan uppnås genom att skapa en middleware med metoden avslutas i mellanvaran. Il terminable Middleware
måste registreras hos middleware
global. Metoden terminate
kommer att få två argument $ begäran e $svar.
Metoden Terminate
måste skapas som visas i följande kod.
php artisan make:middleware TerminateMiddleware
När mellanvaran har skapats app/Http/Middleware/TerminateMiddleware.php
låt oss ändra koden enligt följande
<?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 det här fallet har vi en metod handle
och en metod terminate
med de två parametrarna $request
e $response
.
Låt oss nu registrera mellanvaran
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,
];
Nu måste vi skapa kontrollern för att simulera svaret
php artisan make:controller XYZController --plain
ändra innehållet i klassen
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Nu måste vi redigera filen routes/web.php
lägga till de rutter som behövs för att aktivera begäran
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
vid det här laget kan vi prova exemplet genom att besöka URL:en http://localhost:8000/terminate
och i webbläsaren ser vi följande rader
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Du kanske också gillar:
Att utveckla finmotorik genom färgläggning förbereder barn för mer komplexa färdigheter som att skriva. Att färglägga…
Marinesektorn är en sann global ekonomisk makt, som har navigerat mot en marknad på 150 miljarder...
I måndags tillkännagav Financial Times ett avtal med OpenAI. FT licensierar sin journalistik i världsklass...
Miljontals människor betalar för streamingtjänster och betalar månatliga prenumerationsavgifter. Det är en allmän uppfattning att du...