Midika izany fa rehefa manao fangatahana amin'ny mpizara (Controler Laravel) ny mpampiasa (View Laravel), dia handeha amin'ny middleware ny fangatahana. Amin'izany fomba izany ny middleware dia afaka manamarina raha voamarina ny fangatahana na tsia:
Laravel dia mamela anao defifarano ary ampiasao middleware fanampiny hanaovana asa isan-karazany afa-tsy ny fanamarinana.
Laravel middlewares, toy ny fanamarinana sy ny fiarovana CSRF, dia hita ao amin'ny lahatahiry app/Http/Middleware .
Noho izany dia afaka milaza isika fa ny middleware dia sivana fangatahana http, izay ahafahana manamarina ny fepetra sy manao hetsika.
Mba hamoronana middleware vaovao dia manao izao baiko manaraka izao izahay:
php artisan make:middleware <name-of-middleware>
Mamorona ny middleware
ary antsoinay izany CheckAge
, artisan
dia hamaly antsika toy izao:
Ny varavarankely etsy ambony dia mampiseho fa ny middleware dia vita soa aman-tsara amin'ny anarana " CheckAge ".
Raha te hahita raha noforonina na tsia ny middleware CheckAge dia mandehana any amin'ny tetikasa ao amin'ny fampirimana app/Http/Middleware, dia ho hitanao ilay rakitra vao noforonina.
Ny rakitra vao noforonina dia manana ny code manaraka
<?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);
}
}
Raha hampiasa middleware dia mila misoratra anarana isika.
Misy karazany roa ny middleware ao amin'ny Laravel:
Middleware globale
Route Middleware
Il global middleware dia hotanterahina amin'ny fangatahana HTTP rehetra avy amin'ny fampiharana, raha ny Route Middleware dia homena lalana manokana. Middleware dia azo misoratra anarana amin'ny app/Http/Kernel.php. Ity rakitra ity dia misy fananana roa $ middleware e $routeMiddleware . Ny fananana $ middleware dia ampiasaina hanoratana ny middleware sy ny fananana manerantany $routeMiddleware dia ampiasaina amin'ny fisoratana anarana middleware manokana lalana.
Raha te hisoratra anarana amin'ny middleware manerantany, tanisao ny kilasy amin'ny faran'ny fananana $ 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,
];
Raha te hisoratra anarana middleware manokana momba ny lalana, ampio ny lakile sy sanda amin'ny fananana $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,
];
Namorona izahay CheckAge amin'ny ohatra teo aloha. Afaka misoratra anarana izany amin'ny fananana route middleware isika izao. Ny kaody ho an'ny fisoratana anarana toy izany dia aseho eto ambany.
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,
];
Afaka mandalo masontsivana miaraka amin'ny Middleware ihany koa isika.
Ohatra, raha manana andraikitra samihafa ny fampiharanao toy ny mpampiasa, admin, super admin sns. ary te hanamarina ny hetsika mifototra amin'ny anjara asa ianao dia azonao atao izany amin'ny alàlan'ny fampitaovana ireo paramètres miaraka amin'ny middleware.
Ny middleware noforoninay dia ahitana ity asa manaraka ity, ary afaka mampita hevitra mahazatra isika aorian'ny adihevitra $manaraka .
public function handle($request, Closure $next)
{
return $next($request);
}
Andeha isika izao hanandrana hametraka ny paramètre anjara amin'ny middleware vaovao izay hoforonintsika manomboka amin'ny scratch, dia tohizo ny famoronana Role Middleware amin'ny alàlan'ny baiko manaraka.
Ovay ny fomba fitantanany toy izao manaraka izao
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
nampiana ny paramètre izahay $role
, ary ao anatin'ny fomba ny tsipika echo
mba hanoratana ny vokatra ny anaran`ny anjara.
Andeha isika hisoratra anarana ny RoleMiddleware middleware ho an'ny lalana manokana
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,
];
Ankehitriny mba hitsapana ny middleware miaraka amin'ny parameter, mila mamorona fangatahana sy valiny isika. Mba hanahafana ny valin-teny dia andao hamorona ny controller izay antsoina hoe TestController
php artisan make:controller TestController --plain
ny baiko vao vita dia hamorona mpanara-maso vaovao ao anaty lahatahiry app/Http/TestController.php
, ary ovay ny fomba index
miaraka amin'ny tsipika 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.";
}
}
Aorian'ny fametrahana ny valinteny dia manorina ny fangatahana amin'ny alàlan'ny fanitsiana ny rakitra routes.php
amin'ny fampidirana ny route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
Amin'izao fotoana izao dia afaka manandrana ny ohatra isika amin'ny fitsidihana ny URL http://localhost:8000/role
ary ao amin'ny navigateur dia ho hitantsika izy roa echo
Role editor
Test Controller
Il terminable Middleware
manao asa sasany aorian'ny fandefasana ny valiny amin'ny navigateur. Izany dia azo atao amin'ny famoronana middleware miaraka amin'ny fomba mifarana amin'ny middleware. Il terminable Middleware
tsy maintsy misoratra anarana amin'ny middleware
maneran-tany. Ny fomba terminate
hahazo hevitra roa $ fangatahana e $valiny.
Ny fomba Terminate
dia tsy maintsy noforonina araka ny asehon'ity code manaraka ity.
php artisan make:middleware TerminateMiddleware
Rehefa vita ny middleware app/Http/Middleware/TerminateMiddleware.php
andao hanova ny kaody toy izao manaraka izao
<?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.";
}
}
amin'ity tranga ity dia manana fomba handle
ary fomba iray terminate
miaraka amin'ireo paramètre roa $request
e $response
.
Andeha isika hisoratra anarana ny 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,
];
Amin'izao fotoana izao dia mila mamorona ny controller isika mba hanao simulate ny valiny
php artisan make:controller XYZController --plain
manova ny votoatin'ny kilasy
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Ankehitriny dia mila manova ny rakitra isika routes/web.php
manampy ny lalana ilaina mba hampavitrika ny fangatahana
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
Amin'izao fotoana izao dia afaka manandrana ny ohatra isika amin'ny fitsidihana ny URL http://localhost:8000/terminate
ary ao amin'ny navigateur dia ho hitantsika ireto andalana manaraka ireto
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Azonao atao koa ny:
Nisy fandidiana ophthalmoplasty tamin'ny alàlan'ny mpijery ara-barotra Apple Vision Pro natao tao amin'ny Catania Polyclinic…
Ny fampivelarana ny fahaiza-manao maotera tsara amin'ny alalan'ny fandokoana dia manomana ny ankizy amin'ny fahaiza-manao sarotra kokoa toy ny fanoratana. Loko…
Ny sehatry ny tafika an-dranomasina dia tena hery ara-toekarena manerantany, izay nivezivezy nankany amin'ny tsena 150 miliara...
Ny alatsinainy lasa teo, nanambara fifanarahana tamin'ny OpenAI ny Financial Times. Ny FT dia manome alalana ny asa fanaovan-gazety manerantany…