Dit betsjut dat as de brûker (Laravel werjefte) in fersyk oan 'e tsjinner (Laravel controller), it fersyk sil gean troch de middleware. Op dizze manier kin de middleware kontrolearje oft it fersyk authentisearre is of net:
Laravel kinne jo defifinish en brûk ekstra middleware om in ferskaat oan taken út te fieren útsein autentikaasje.
Laravel middlewares, lykas autentikaasje en CSRF-beskerming, lizze yn 'e map app/Http/Middleware .
Wy kinne dêrom sizze dat de middleware in http-oanfraachfilter is, wêrtroch it mooglik is om betingsten te ferifiearjen en aksjes út te fieren.
Om in nije middleware te meitsjen rinne wy it folgjende kommando út:
php artisan make:middleware <name-of-middleware>
Wy meitsje de middleware
en wy neame it CheckAge
, artisan
sil ús as folgjend antwurdzje:
It finster hjirboppe lit sjen dat de middleware mei súkses makke is mei de namme " CheckAge ".
Om te sjen oft de CheckAge-middleware is oanmakke of net, gean nei it projekt yn 'e app/Http/Middleware-map, en jo sille it nij oanmakke bestân sjen
De nij oanmakke triem hat de folgjende koade
<?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 brûken, moatte wy it registrearje.
D'r binne twa soarten middleware yn Laravel:
Middleware globale
Route Middleware
Il globale middleware sil útfierd wurde op elke HTTP-fersyk fan 'e applikaasje, wylst de Rûte Middleware sil wurde tawiisd oan in spesifyk paad. Middleware kin registrearre wurde by app/Http/Kernel.php. Dizze triem befettet twa eigenskippen $middleware e $routeMiddleware . De $middleware-eigendom wurdt brûkt om wrâldwide middleware en eigendom te registrearjen $routeMiddleware wurdt brûkt om rûte-spesifike middleware te registrearjen.
Om wrâldwide middleware te registrearjen, listje de klasse oan 'e ein fan it $middleware-eigenskip.
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 rûtespesifike middleware te registrearjen, foegje de kaai en wearde ta oan it $routeMiddleware-eigenskip.
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,
];
Wy makken CheckAge yn it foarige foarbyld. Wy kinne dit no registrearje yn it eigendom fan 'e middleware-rûte. De koade foar sa'n registraasje wurdt hjirûnder werjûn.
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,
];
Wy kinne ek parameters trochjaan mei Middleware.
Bygelyks, as jo applikaasje ferskate rollen hat lykas brûker, admin, super admin ensfh. en jo wolle de aksje authentisearje op basis fan 'e rol, kinne jo it dwaan troch de parameters mei de middleware troch te jaan.
De middleware dy't wy makke hawwe befettet de folgjende funksje, en wy kinne oanpaste arguminten trochjaan nei it argumint $ folgjende .
public function handle($request, Closure $next)
{
return $next($request);
}
Litte wy no besykje de rolparameter yn te stellen op in nije middleware dy't wy fanôf it begjin sille meitsje, gean dan troch mei it meitsjen fan Role Middleware troch it folgjende kommando út te fieren
Feroarje de handgreepmetoade as folget
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
wy tafoege de parameter $role
, en binnen de metoade de line echo
om de útfier de namme fan 'e rol te skriuwen.
Litte wy no de RoleMiddleware-middleware registrearje foar in spesifyk paad
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,
];
No om de middleware te testen mei de parameter, moatte wy in fersyk en in antwurd meitsje. Om it antwurd te simulearjen, litte wy de controller oanmeitsje dy't wy TestController sille neame
php artisan make:controller TestController --plain
it krekt útfierde kommando sil in nije controller meitsje yn 'e map app/Http/TestController.php
, en feroarje de metoade index
mei de line 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.";
}
}
Nei it ynstellen fan it antwurd bouwe wy it fersyk op troch it bestân te bewurkjen routes.php
troch it tafoegjen fan de route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
op dit punt kinne wy it foarbyld besykje troch de URL te besykjen http://localhost:8000/role
en yn 'e browser sille wy de twa sjen echo
Role editor
Test Controller
Il terminable Middleware
fiert guon taken neidat it antwurd is stjoerd nei de browser. Dit kin berikt wurde troch it meitsjen fan in middleware mei de metoade beëinigje yn 'e middleware. Il terminable Middleware
moatte wurde registrearre mei de middleware
mondiaal. De metoade terminate
sil ûntfange twa arguminten $oanfraach e $ antwurd.
De metoade Terminate
moat oanmakke wurde lykas werjûn yn 'e folgjende koade.
php artisan make:middleware TerminateMiddleware
Sadree't de middleware is oanmakke app/Http/Middleware/TerminateMiddleware.php
lit ús wizigje de koade as folget
<?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.";
}
}
yn dit gefal hawwe wy in metoade handle
en metoade terminate
mei de twa parameters $request
e $response
.
Litte wy no de Middleware registrearje
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,
];
No moatte wy de controller oanmeitsje om it antwurd te simulearjen
php artisan make:controller XYZController --plain
it feroarjen fan de ynhâld fan 'e klasse
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
No moatte wy de triem bewurkje routes/web.php
it tafoegjen fan de rûtes dy't nedich binne om it fersyk te aktivearjen
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
op dit punt kinne wy it foarbyld besykje troch de URL te besykjen http://localhost:8000/terminate
en yn 'e browser sille wy de folgjende rigels sjen
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Jo meie ek leuk fine:
De marinesektor is in wiere wrâldwide ekonomyske macht, dy't navigearre is nei in merk fan 150 miljard ...
Ofrûne moandei kundige de Financial Times in deal oan mei OpenAI. FT lisinsje har sjoernalistyk fan wrâldklasse ...
Miljoenen minsken betelje foar streamingtsjinsten, beteljen moanlikse abonnemintskosten. It is gewoane miening dat jo ...
Coveware troch Veeam sil trochgean mei it leverjen fan antwurdtsjinsten foar cyberafpersing ynsidint. Coveware sil forensyske en sanearjen mooglikheden oanbiede ...