Dit betekent dat wanneer de gebruiker (Laravel-weergave) een verzoek doet aan de server (Laravel-controller), het verzoek via de middleware gaat. Op deze manier kan de middleware controleren of het verzoek is geverifieerd of niet:
Laravel staat je dat toe defivoltooi en gebruik aanvullende middleware om een verscheidenheid aan taken uit te voeren, behalve authenticatie.
Laravel-middlewares, zoals authenticatie en CSRF-beveiliging, bevinden zich in de directory app/Http/Middleware .
We kunnen dus zeggen dat de middleware een http-verzoekfilter is, waarmee het mogelijk is om voorwaarden te verifiëren en acties uit te voeren.
Om een nieuwe middleware te maken voeren we de volgende opdracht uit:
php artisan make:middleware <name-of-middleware>
Wij creëren de middleware
en we noemen het CheckAge
, artisan
zal ons als volgt antwoorden:
Het bovenstaande venster laat zien dat de middleware succesvol is aangemaakt met de naam ” CheckLeeftijd '.
Om te zien of de CheckAge-middleware is gemaakt of niet, gaat u naar het project in de map app/Http/Middleware en ziet u het nieuw gemaakte bestand
Het nieuw gemaakte bestand heeft de volgende code
<?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);
}
}
Om middleware te gebruiken, moeten we deze registreren.
Er zijn twee soorten middleware in Laravel:
Middleware globale
Route Middleware
Il wereldwijde middleware wordt uitgevoerd op elk HTTP-verzoek van de applicatie, terwijl de Route-middleware wordt toegewezen aan een specifiek pad. Middleware kan worden geregistreerd bij app/Http/Kernel.php. Dit bestand bevat twee eigenschappen $middleware e $routeMiddleware . De eigenschap $middleware wordt gebruikt om wereldwijde middleware en eigendom te registreren $routeMiddleware wordt gebruikt om routespecifieke middleware te registreren.
Om globale middleware te registreren, vermeldt u de klasse aan het einde van de eigenschap $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,
];
Om routespecifieke middleware te registreren, voegt u de sleutel en waarde toe aan de eigenschap $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,
];
We hebben gemaakt CheckLeeftijd in het vorige voorbeeld. We kunnen dit nu registreren in de eigenschap middlewareroute. De code voor een dergelijke registratie wordt hieronder weergegeven.
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,
];
We kunnen ook parameters doorgeven met Middleware.
Als uw toepassing bijvoorbeeld verschillende rollen heeft, zoals gebruiker, beheerder, superbeheerder enz. en u de actie wilt verifiëren op basis van de rol, kunt u dit doen door de parameters door te geven met de middleware.
De middleware die we hebben gemaakt, bevat de volgende functie en we kunnen aangepaste argumenten doorgeven na het argument $volgende .
public function handle($request, Closure $next)
{
return $next($request);
}
Laten we nu proberen de role-parameter in te stellen op een nieuwe middleware die we helemaal opnieuw gaan maken, en vervolgens doorgaan met het maken van Role-middleware door de volgende opdracht uit te voeren
Wijzig de handle-methode als volgt
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
we hebben de parameter toegevoegd $role
, en binnen de methode de regel echo
om de uitvoer de naam van de rol te schrijven.
Laten we nu de RoleMiddleware-middleware registreren voor een specifiek 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 nu de middleware met de parameter te testen, moeten we een verzoek en een antwoord maken. Om het antwoord te simuleren, maken we de controller die we TestController zullen noemen
php artisan make:controller TestController --plain
de zojuist uitgevoerde opdracht maakt een nieuwe controller in de map app/Http/TestController.php
en verander de methode index
met de lijn 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 we het antwoord hebben ingesteld, bouwen we het verzoek op door het bestand te bewerken routes.php
door toevoeging van de route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
op dit punt kunnen we het voorbeeld proberen door de URL te bezoeken http://localhost:8000/role
en in de browser zullen we de twee zien echo
Role editor
Test Controller
Il terminable Middleware
voert enkele taken uit nadat het antwoord naar de browser is verzonden. Dit kan worden bereikt door middel van het creëren van een middleware met de methode eindigen in de middleware. Il terminable Middleware
moet aangemeld zijn bij de middleware
globaal. De methode terminate
krijgt twee argumenten $ verzoek e $antwoord.
De methode Terminate
moet worden gemaakt zoals weergegeven in de volgende code.
php artisan make:middleware TerminateMiddleware
Zodra de middleware is gemaakt app/Http/Middleware/TerminateMiddleware.php
laten we de code als volgt wijzigen
<?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 dit geval hebben we een methode handle
en een methode terminate
met de twee parameters $request
e $response
.
Laten we nu de middleware registreren
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 moeten we de controller maken om de reactie te simuleren
php artisan make:controller XYZController --plain
de inhoud van de klas wijzigen
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Nu moeten we het bestand bewerken routes/web.php
het toevoegen van de routes die nodig zijn om het verzoek te activeren
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
op dit punt kunnen we het voorbeeld proberen door de URL te bezoeken http://localhost:8000/terminate
en in de browser zullen we de volgende regels zien
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Mogelijk bent u ook geïnteresseerd in:
De marinesector is een echte mondiale economische macht, die is genavigeerd naar een markt van 150 miljard...
Afgelopen maandag maakte de Financial Times een deal met OpenAI bekend. FT geeft licenties voor haar journalistiek van wereldklasse...
Miljoenen mensen betalen voor streamingdiensten en betalen maandelijkse abonnementskosten. De algemene mening is dat je…
Coveware by Veeam zal responsdiensten op het gebied van cyberafpersingsincidenten blijven leveren. Coveware zal forensische en herstelmogelijkheden bieden...