Սա նշանակում է, որ երբ օգտատերը (Laravel view) հարցում է անում սերվերին (Laravel վերահսկիչ), հարցումը կանցնի միջնակարգ ծրագրով։ Այս կերպ միջին ծրագիրը կարող է ստուգել, արդյոք հարցումը վավերացված է, թե ոչ.
Laravel-ը թույլ է տալիս defiավարտել և օգտագործել լրացուցիչ միջնակարգ ծրագիր՝ մի շարք առաջադրանքներ կատարելու համար, բացառությամբ նույնականացման:
Laravel-ի միջին ծրագրերը, ինչպիսիք են նույնականացումը և CSRF պաշտպանությունը, գտնվում են գրացուցակում հավելված/Http/Middleware .
Այսպիսով, մենք կարող ենք ասել, որ միջին ծրագիրը http հարցումների զտիչ է, որի միջոցով հնարավոր է ստուգել պայմանները և կատարել գործողություններ:
Նոր միջին ծրագիր ստեղծելու համար մենք գործարկում ենք հետևյալ հրամանը.
php artisan make:middleware <name-of-middleware>
Մենք ստեղծում ենք middleware
և մենք դա անվանում ենք CheckAge
, artisan
մեզ կպատասխանի հետևյալ կերպ.
Վերևի պատուհանը ցույց է տալիս, որ միջին ծրագիրը հաջողությամբ ստեղծվել է անունով » CheckAge ".
Տեսնելու համար, թե արդյոք CheckAge-ի միջին ծրագիրը ստեղծված է, թե ոչ, գնացեք նախագիծ app/Http/Middleware թղթապանակում և կտեսնեք նոր ստեղծված ֆայլը:
Նոր ստեղծված ֆայլն ունի հետևյալ կոդը
<?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);
}
}
Միջին ծրագիր օգտագործելու համար մենք պետք է գրանցենք այն:
Laravel-ում կա երկու տեսակի միջին ծրագիր.
Middleware globale
Route Middleware
Il գլոբալ միջին ծրագիր կկատարվի հավելվածից ստացված յուրաքանչյուր HTTP հարցումով, մինչդեռ Route Middleware կնշանակվի կոնկրետ ուղի: Միջին ծրագրակազմը կարելի է գրանցել այստեղ app/Http/Kernel.php. Այս ֆայլը պարունակում է երկու հատկություն $ միջին ծրագիր e $routeMiddleware . $middleware հատկությունը օգտագործվում է գլոբալ միջին ծրագրերի և սեփականության գրանցման համար $routeMiddleware օգտագործվում է երթուղու հատուկ միջին ծրագրակազմ գրանցելու համար:
Համաշխարհային միջին ծրագիր գրանցելու համար նշեք դասը $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,
];
Երթուղու համար հատուկ միջին ծրագիր գրանցելու համար բանալին և արժեքը ավելացրեք $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,
];
Մենք ստեղծել ենք CheckAge նախորդ օրինակում։ Այժմ մենք կարող ենք սա գրանցել Middleware route սեփականության մեջ: Նման գրանցման կոդը ներկայացված է ստորև:
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,
];
Մենք կարող ենք նաև պարամետրեր փոխանցել Middleware-ով։
Օրինակ, եթե ձեր հավելվածն ունի տարբեր դերեր՝ օգտատեր, ադմինիստրատոր, սուպեր ադմին և այլն: իսկ դուք ցանկանում եք վավերացնել գործողությունը՝ հիմնվելով դերի վրա, կարող եք դա անել՝ փոխանցելով պարամետրերը միջին ծրագրով։
Մեր ստեղծած միջին ծրագիրը պարունակում է հետևյալ ֆունկցիան, և մենք կարող ենք արգումենտից հետո փոխանցել հատուկ արգումենտներ $ հաջորդը .
public function handle($request, Closure $next)
{
return $next($request);
}
Այժմ եկեք փորձենք սահմանել դերի պարամետրը նոր միջին ծրագրի վրա, որը մենք պատրաստվում ենք ստեղծել զրոյից, ապա շարունակենք ստեղծել Role Middleware՝ գործարկելով հետևյալ հրամանը:
Փոփոխեք բռնակի մեթոդը հետևյալ կերպ
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
մենք ավելացրել ենք պարամետրը $role
, իսկ մեթոդի ներսում՝ գիծը echo
ելքը գրել դերի անվանումը.
Հիմա եկեք գրանցենք RoleMiddleware միջին ծրագիրը որոշակի ճանապարհի համար
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,
];
Այժմ միջին ծրագիրը պարամետրով փորձարկելու համար մենք պետք է ստեղծենք հարցում և պատասխան: Պատասխանը մոդելավորելու համար եկեք ստեղծենք վերահսկիչ, որը մենք կանվանենք TestController
php artisan make:controller TestController --plain
հենց նոր կատարված հրամանը կստեղծի նոր վերահսկիչ թղթապանակի ներսում app/Http/TestController.php
, և փոխել մեթոդը index
գծի հետ 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.";
}
}
Պատասխանը կարգավորելուց հետո մենք կառուցում ենք հարցումը՝ ֆայլը խմբագրելով routes.php
ավելացնելով route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
այս պահին մենք կարող ենք օրինակը փորձել՝ այցելելով URL http://localhost:8000/role
և բրաուզերում մենք կտեսնենք երկուսը echo
Role editor
Test Controller
Il terminable Middleware
կատարում է որոշ առաջադրանքներ՝ պատասխանը բրաուզեր ուղարկելուց հետո: Դրան կարելի է հասնել՝ մեթոդով միջին ծրագիր ստեղծելով ավարտվել միջին ծրագրով: Il terminable Middleware
պետք է գրանցված լինի middleware
համաշխարհային. Մեթոդը terminate
կստանա երկու փաստարկ $խնդրանք e $պատասխան.
Մեթոդը Terminate
պետք է ստեղծվի, ինչպես ցույց է տրված հետևյալ կոդում:
php artisan make:middleware TerminateMiddleware
Միջին ծրագրաշարը ստեղծելուց հետո app/Http/Middleware/TerminateMiddleware.php
եկեք փոփոխենք կոդը հետևյալ կերպ
<?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.";
}
}
այս դեպքում մենք ունենք մեթոդ handle
և մեթոդ terminate
երկու պարամետրերով $request
e $response
.
Հիմա եկեք գրանցենք 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,
];
Այժմ մենք պետք է ստեղծենք վերահսկիչ՝ պատասխանը մոդելավորելու համար
php artisan make:controller XYZController --plain
փոփոխել դասի բովանդակությունը
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Այժմ մենք պետք է խմբագրենք ֆայլը routes/web.php
ավելացնելով երթուղիները, որոնք անհրաժեշտ են հարցումն ակտիվացնելու համար
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
այս պահին մենք կարող ենք օրինակը փորձել՝ այցելելով URL http://localhost:8000/terminate
իսկ բրաուզերում կտեսնենք հետևյալ տողերը
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Ձեզ նույնպես կարող է դուր գալ.
Կատանիայի պոլիկլինիկայում ակնաբուժական վիրահատություն է կատարվել Apple Vision Pro գովազդային հեռուստադիտողի միջոցով…
Գունավորելու միջոցով նուրբ շարժիչ հմտությունների զարգացումը երեխաներին պատրաստում է ավելի բարդ հմտությունների, ինչպիսին է գրելը: Գունավորելու…
Ծովային ոլորտը իսկական համաշխարհային տնտեսական տերություն է, որը նավարկվել է դեպի 150 միլիարդանոց շուկա...
Անցյալ երկուշաբթի Financial Times-ը հայտարարեց OpenAI-ի հետ գործարքի մասին: FT-ն արտոնագրում է իր համաշխարհային մակարդակի լրագրությունը…