Dan ifisser li meta l-utent (vista Laravel) jagħmel talba lis-server (kontrollur Laravel), it-talba tgħaddi mill-middleware. B'dan il-mod il-middleware jista' jiċċekkja jekk it-talba hijiex awtentikata jew le:
Laravel jippermettilek defitlesti u uża middleware addizzjonali biex twettaq varjetà ta 'kompiti ħlief l-awtentikazzjoni.
Middlewares Laravel, bħall-awtentikazzjoni u l-protezzjoni CSRF, jinsabu fid-direttorju app/Http/Middleware .
Nistgħu għalhekk ngħidu li l-middleware huwa filtru ta 'talba http, li permezz tiegħu huwa possibbli li jiġu vverifikati l-kundizzjonijiet u jitwettqu azzjonijiet.
Biex noħolqu middleware ġdid aħna nħaddmu l-kmand li ġej:
php artisan make:middleware <name-of-middleware>
Noħolqu l- middleware
u nsejħulha CheckAge
, artisan
se jwieġbuna kif ġej:
It-tieqa ta 'hawn fuq turi li l-middleware inħoloq b'suċċess bl-isem " CheckAge ".
Biex tara jekk il-middleware CheckAge jinħoloqx jew le, mur fil-proġett fil-folder app/Http/Middleware, u tara l-fajl li għadu kif inħoloq
Il-fajl maħluq ġdid għandu l-kodiċi li ġej
<?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);
}
}
Biex nużaw middleware, għandna bżonn nirreġistrawh.
Hemm żewġ tipi ta 'middleware f'Laravel:
Middleware globale
Route Middleware
Il middleware globali se jiġi eżegwit fuq kull talba HTTP mill-applikazzjoni, filwaqt li l- Rotta Middleware se jiġu assenjati għal mogħdija speċifika. Middleware jista' jiġi rreġistrat fuq app/Http/Kernel.php. Dan il-fajl fih żewġ proprjetajiet $middleware e $routeMiddleware . Il-proprjetà $ middleware jintuża biex jirreġistra middleware u sjieda globali $routeMiddleware jintuża biex jirreġistra middleware speċifiku għar-rotta.
Biex tirreġistra middleware globali, elenka l-klassi fl-aħħar tal-proprjetà $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,
];
Biex tirreġistra middleware speċifiku għar-rotta, żid iċ-ċavetta u l-valur mal-proprjetà $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,
];
Ħloqna CheckAge fl-eżempju preċedenti. Issa nistgħu nirreġistraw dan fil-proprjetà tar-rotta tal-middleware. Il-kodiċi għal tali reġistrazzjoni jidher hawn taħt.
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,
];
Nistgħu wkoll ngħaddu parametri ma 'Middleware.
Pereżempju, jekk l-applikazzjoni tiegħek għandha rwoli differenti bħal utent, admin, super admin eċċ. u trid tivverifika l-azzjoni bbażata fuq ir-rwol, tista 'tagħmel dan billi tgħaddi l-parametri mal-middleware.
Il-middleware li ħloqna fih il-funzjoni li ġejja, u nistgħu ngħaddu argumenti personalizzati wara l-argument $li jmiss .
public function handle($request, Closure $next)
{
return $next($request);
}
Issa ejja nippruvaw nissettjaw il-parametru tar-rwol għal middleware ġdid li se noħolqu mill-bidu nett, imbagħad ipproċedi biex noħolqu Role Middleware billi tħaddem il-kmand li ġej
Immodifika l-metodu tal-manku kif ġej
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
żidna l-parametru $role
, u ġewwa l-metodu l-linja echo
biex tikteb l-output l-isem tar-rwol.
Issa ejja nirreġistraw il-middleware RoleMiddleware għal mogħdija speċifika
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,
];
Issa biex nittestjaw il-middleware bil-parametru, irridu noħolqu talba u tweġiba. Biex tissimula r-rispons ejja noħolqu l-kontrollur li se nsejħu TestController
php artisan make:controller TestController --plain
il-kmand li għadu kemm ġie esegwit se joħloq kontrollur ġdid ġewwa l-folder app/Http/TestController.php
, u ibdel il-metodu index
mal-linja 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.";
}
}
Wara li waqqaf ir-rispons, nibnu t-talba billi neditjaw il-fajl routes.php
billi żżid il- route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
f'dan il-punt nistgħu nippruvaw l-eżempju billi nżuru l-URL http://localhost:8000/role
u fil-browser naraw it-tnejn echo
Role editor
Test Controller
Il terminable Middleware
iwettaq xi kompiti wara li r-rispons jintbagħat lill-browser. Dan jista 'jinkiseb billi jinħoloq middleware bil-metodu ittemm fil-middleware. Il terminable Middleware
għandhom ikunu reġistrati mal- middleware
globali. Il-metodu terminate
se jirċievi żewġ argumenti $talba e $risposta.
Il-metodu Terminate
trid tinħoloq kif muri fil-kodiċi li ġej.
php artisan make:middleware TerminateMiddleware
Ladarba jinħoloq il-middleware app/Http/Middleware/TerminateMiddleware.php
ejja timmodifika l-kodiċi kif ġej
<?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.";
}
}
f'dan il-każ għandna metodu handle
u metodu terminate
maż-żewġ parametri $request
e $response
.
Issa ejja nirreġistraw il-Middleware
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,
];
Issa għandna bżonn noħolqu l-kontrollur biex jissimulaw ir-rispons
php artisan make:controller XYZController --plain
jimmodifika l-kontenut tal-klassi
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Issa għandna bżonn neditjaw il-fajl routes/web.php
iż-żieda tar-rotot meħtieġa biex tiġi attivata t-talba
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
f'dan il-punt nistgħu nippruvaw l-eżempju billi nżuru l-URL http://localhost:8000/terminate
u fil-browser naraw il-linji li ġejjin
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Jista 'jkun li tixtieq ukoll:
Is-settur navali huwa qawwa ekonomika globali vera, li navigat lejn suq ta’ 150 biljun...
It-Tnejn li għadda, il-Financial Times ħabbret ftehim mal-OpenAI. FT tagħti liċenzja għall-ġurnaliżmu ta’ klassi dinjija tagħha...
Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...
Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...