Հոդվածներ

Ինչպես է այն աշխատում, Laravel Middleware-ը

Laravel Middleware-ը միջանկյալ կիրառական շերտ է, որը միջամտում է օգտատիրոջ խնդրանքի և հավելվածի պատասխանի միջև:

Սա նշանակում է, որ երբ օգտատերը (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

Terminable Middleware

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-ի դիտողի հետ Կատանիայի պոլիկլինիկայում

Կատանիայի պոլիկլինիկայում ակնաբուժական վիրահատություն է կատարվել Apple Vision Pro գովազդային հեռուստադիտողի միջոցով…

3 Մայիս 2024

Երեխաների գունազարդման էջերի առավելությունները՝ կախարդական աշխարհ բոլոր տարիքի համար

Գունավորելու միջոցով նուրբ շարժիչ հմտությունների զարգացումը երեխաներին պատրաստում է ավելի բարդ հմտությունների, ինչպիսին է գրելը: Գունավորելու…

2 Մայիս 2024

Ապագան այստեղ է. Ինչպես է բեռնափոխադրման արդյունաբերությունը հեղափոխում համաշխարհային տնտեսությունը

Ծովային ոլորտը իսկական համաշխարհային տնտեսական տերություն է, որը նավարկվել է դեպի 150 միլիարդանոց շուկա...

1 Մայիս 2024

Հրատարակիչները և OpenAI-ը ստորագրում են համաձայնագրեր՝ արհեստական ​​ինտելեկտի կողմից մշակվող տեղեկատվության հոսքը կարգավորելու համար

Անցյալ երկուշաբթի Financial Times-ը հայտարարեց OpenAI-ի հետ գործարքի մասին: FT-ն արտոնագրում է իր համաշխարհային մակարդակի լրագրությունը…

30 Ապրիլ 2024

Կարդացեք նորարարությունը ձեր լեզվով

Նորարարության տեղեկագիր
Բաց մի թողեք նորարարության մասին ամենակարևոր նորությունները: Գրանցվեք դրանք էլփոստով ստանալու համար:

Հետեւեք մեզ