Ĉi tio signifas, ke kiam la uzanto (Laravel-vido) faras peton al la servilo (Laravel-regilo), la peto trapasos la mezprogramon. Tiel la mezprogramo povas kontroli ĉu la peto estas aŭtentikigita aŭ ne:
Laravel permesas vin defifini kaj uzu plian mezvaron por plenumi diversajn taskojn krom aŭtentigo.
Laravel-mezvaroj, kiel aŭtentikigo kaj CSRF-protekto, troviĝas en la dosierujo app/Http/Middleware .
Ni povas do diri, ke la mezprogramo estas http-peta filtrilo, per kiu eblas kontroli kondiĉojn kaj plenumi agojn.
Por krei novan mezvaron ni rulas la jenan komandon:
php artisan make:middleware <name-of-middleware>
Ni kreas la middleware
kaj ni nomas ĝin CheckAge
, artisan
respondos al ni jene:
La supra fenestro montras, ke la mezprogramo estis sukcese kreita kun la nomo " Kontrolu Aĝon ".
Por vidi ĉu la mezuraĵo de CheckAge estas kreita aŭ ne, iru al la projekto en la dosierujo de app/Http/Middleware, kaj vi vidos la nove kreitan dosieron.
La lastatempe kreita dosiero havas la jenan kodon
<?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);
}
}
Por uzi mezvaron, ni devas registri ĝin.
Estas du specoj de mezvaro en Laravel:
Middleware globale
Route Middleware
Il tutmonda mezvaro estos efektivigita sur ĉiu HTTP-peto de la aplikaĵo, dum la Itinero Middleware estos asignita al specifa vojo. Middleware povas esti registrita ĉe app/Http/Kernel.php. Ĉi tiu dosiero enhavas du trajtojn $mezaĵoj e $routeMiddleware . La posedaĵo $middleware estas uzata por registri tutmondan mezvaron kaj proprieton $routeMiddleware estas uzata por registri itineran mezvaron.
Por registri tutmondan mezvaron, listigu la klason ĉe la fino de la $middleware-posedaĵo.
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,
];
Por registri itineran mezvaron, aldonu la ŝlosilon kaj valoron al la posedaĵo $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,
];
Ni kreis Kontrolu Aĝon en la antaŭa ekzemplo. Ni nun povas registri ĉi tion en la posedaĵo de middleware route. La kodo por tia registriĝo estas montrita sube.
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,
];
Ni ankaŭ povas pasi parametrojn kun Middleware.
Ekzemple, se via aplikaĵo havas malsamajn rolojn kiel uzanto, administranto, superadministranto ktp. kaj vi volas aŭtentikigi la agon surbaze de la rolo, vi povas fari ĝin preterpasante la parametrojn kun la mezvaro.
La mezprogramo, kiun ni kreis, enhavas la sekvan funkcion, kaj ni povas pasi kutimajn argumentojn post la argumento $sekva .
public function handle($request, Closure $next)
{
return $next($request);
}
Nun ni provu agordi la rolan parametron al nova mezvaro, kiun ni kreos de nulo, poste kreu Role Middleware rulante la sekvan komandon
Modifi la tenilmetodon jene
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
ni aldonis la parametron $role
, kaj ene de la metodo la linio echo
por skribi la eligon la nomon de la rolo.
Nun ni registri la mezvaron RoleMiddleware por specifa vojo
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,
];
Nun por testi la mezprogramon kun la parametro, ni devas krei peton kaj respondon. Por simuli la respondon, ni kreu la regilon, kiun ni nomos TestController
php artisan make:controller TestController --plain
la ĵus plenumita komando kreos novan regilon en la dosierujo app/Http/TestController.php
, kaj ŝanĝu la metodon index
kun la linio 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.";
}
}
Post agordo de la respondo, ni konstruas la peton redaktante la dosieron routes.php
aldonante la route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
ĉe ĉi tiu punkto ni povas provi la ekzemplon vizitante la URL http://localhost:8000/role
kaj en la retumilo ni vidos la du echo
Role editor
Test Controller
Il terminable Middleware
plenumas kelkajn taskojn post kiam la respondo estas sendita al la retumilo. Ĉi tio povas esti atingita kreante mezvaron kun la metodo finiĝas en la mezvaro. Il terminable Middleware
devas esti registrita ĉe la middleware
tutmonda. La metodo terminate
ricevos du argumentojn $peto e $respondo.
La metodo Terminate
devas esti kreita kiel montrite en la sekva kodo.
php artisan make:middleware TerminateMiddleware
Post kiam la mezvaro estas kreita app/Http/Middleware/TerminateMiddleware.php
ni modifu la kodon jene
<?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.";
}
}
en ĉi tiu kazo ni havas metodon handle
kaj metodo terminate
kun la du parametroj $request
e $response
.
Nun ni registri la 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,
];
Nun ni devas krei la regilon por simuli la respondon
php artisan make:controller XYZController --plain
modifante la enhavon de la klaso
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Nun ni devas redakti la dosieron routes/web.php
aldonante la vojojn necesajn por aktivigi la peton
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
ĉe ĉi tiu punkto ni povas provi la ekzemplon vizitante la URL http://localhost:8000/terminate
kaj en la retumilo ni vidos la sekvajn liniojn
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Ankaŭ vi povus ŝati:
La UK CMA publikigis averton pri la konduto de Big Tech en la merkato de artefarita inteligenteco. Tie…
La Dekreto "Verdaj Domoj", formulita de Eŭropa Unio por plibonigi la energi-efikecon de konstruaĵoj, finis sian leĝdonan procezon per...
La jarraporto de Casaleggio Associati pri Ekomerco en Italio prezentita. Raporto titolita "AI-Komerco: la limoj de Ekomerco kun Artefarita Inteligenteco"....
Rezulto de konstanta teknologia novigo kaj engaĝiĝo al la medio kaj la bonfarto de homoj. Bandalux prezentas Airpure®, tendon...