Erthyglau

Laravel middleware sut mae'n gweithio

Mae Laravel middleware yn haen cymhwysiad canolraddol sy'n ymyrryd rhwng cais y defnyddiwr ac ymateb y rhaglen.

Mae hyn yn golygu pan fydd y defnyddiwr (Laravel view) yn gwneud cais i'r gweinydd (rheolwr Laravel), bydd y cais yn mynd trwy'r nwyddau canol. Fel hyn gall y nwyddau canol wirio a yw'r cais wedi'i ddilysu ai peidio: 

  • os caiff cais y defnyddiwr ei ddilysu, anfonir y cais i'r pen ôl;
  • os yw cais y defnyddiwr heb ei ddilysu, bydd y nwyddau canol yn ailgyfeirio'r defnyddiwr i'r sgrin mewngofnodi.

Mae Laravel yn caniatáu ichi wneud hynny defigorffen a defnyddio offer canol ychwanegol i gyflawni amrywiaeth o dasgau ac eithrio dilysu. 

Mae nwyddau canol Laravel, fel dilysu ac amddiffyn CSRF, wedi'u lleoli yn y cyfeiriadur ap/Http/Middleware .

Gallwn ddweud felly bod y nwyddau canol yn hidlydd cais http, y gellir ei ddefnyddio i wirio amodau a chyflawni gweithredoedd.

Creu canolwedd

I greu nwyddau canol newydd rydym yn rhedeg y gorchymyn canlynol:

php artisan make:middleware <name-of-middleware>

Rydym yn creu y middleware ac rydym yn ei alw CheckAge, artisan bydd yn ein hateb fel a ganlyn:

Mae'r ffenestr uchod yn dangos bod y nwyddau canol wedi'u creu'n llwyddiannus gyda'r enw ” CheckAge ".

I weld a yw nwyddau canol CheckAge wedi'u creu ai peidio, ewch i'r prosiect yn y ffolder app / Http / Middleware, a byddwch yn gweld y ffeil sydd newydd ei chreu

Mae gan y ffeil sydd newydd ei chreu y cod canlynol

<?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);
    }
}

Defnyddiwch offer canol

Er mwyn defnyddio nwyddau canol, mae angen inni ei gofrestru.

Mae dau fath o nwyddau canol yn Laravel:

  • Middleware globale
  • Route Middleware

Il nwyddau canol byd-eang yn cael ei weithredu ar bob cais HTTP o'r cais, tra bod y Llwybr Canolwedd yn cael ei neilltuo i lwybr penodol. Gellir cofrestru nwyddau canol yn app/Http/Kernel.php. Mae'r ffeil hon yn cynnwys dau briodwedd $ llestri canol e $ routeMiddleware . Yr eiddo $middleware yn cael ei ddefnyddio i gofrestru nwyddau canol byd-eang a pherchnogaeth $ routeMiddleware yn cael ei ddefnyddio i gofrestru nwyddau canol llwybr-benodol.

I gofrestru nwyddau canol byd-eang, rhestrwch y dosbarth ar ddiwedd yr eiddo $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,
    ];

I gofrestru nwyddau canol llwybr-benodol, ychwanegwch yr allwedd a'r gwerth i'r eiddo $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,
    ];

Fe wnaethon ni greu CheckAge yn yr enghraifft flaenorol. Gallwn nawr gofrestru hwn yn eiddo llwybr y nwyddau canol. Mae'r cod ar gyfer cofrestriad o'r fath i'w weld isod.

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,
    ];

Paramedrau nwyddau canol

Gallwn hefyd basio paramedrau gyda Middleware. 

Er enghraifft, os oes gan eich cais rolau gwahanol fel defnyddiwr, gweinyddwr, uwch weinyddwr ac ati. ac rydych chi am ddilysu'r weithred yn seiliedig ar y rôl, gallwch chi ei wneud trwy basio'r paramedrau gyda'r nwyddau canol. 

Mae'r offer canol a grëwyd gennym yn cynnwys y swyddogaeth ganlynol, a gallwn basio dadleuon arferiad ar ôl y ddadl $ nesaf .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Nawr, gadewch i ni geisio gosod y paramedr rôl i offer canol newydd yr ydym yn mynd i'w greu o'r dechrau, yna symud ymlaen i greu Role Middleware trwy redeg y gorchymyn canlynol

Addaswch y dull handlen fel a ganlyn

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

ychwanegon ni'r paramedr $role, a thu mewn i'r dull y llinell echo i ysgrifennu'r allbwn enw'r rôl.

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Nawr, gadewch i ni gofrestru'r offer canol RoleMiddleware ar gyfer llwybr penodol

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,
    ];

Nawr i brofi'r nwyddau canol gyda'r paramedr, mae angen i ni greu cais ac ymateb. I efelychu'r ymateb, gadewch i ni greu'r rheolydd y byddwn yn ei alw'n TestController

php artisan make:controller TestController --plain

bydd y gorchymyn sydd newydd ei weithredu yn creu rheolydd newydd y tu mewn i'r ffolder app/Http/TestController.php, a newid y dull index gyda'r llinell 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.";
   }
}

Ar ôl sefydlu'r ymateb, rydym yn adeiladu'r cais trwy olygu'r ffeil routes.phptrwy ychwanegu y route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

ar y pwynt hwn gallwn roi cynnig ar yr enghraifft trwy ymweld â'r URL http://localhost:8000/role

ac yn y porwr gwelwn y ddau echo

Role editor
Test Controller

Llestri Canol Terfynadwy

Il terminable Middleware yn cyflawni rhai tasgau ar ôl i'r ymateb gael ei anfon i'r porwr. Gellir cyflawni hyn trwy greu offer canol gyda'r dull terfynu yn y llestri canol. Il terminable Middleware rhaid cofrestru gyda'r middleware byd-eang. Y dull terminate bydd yn derbyn dwy ddadl $cais e $ymateb. 

Y dull Terminate rhaid ei greu fel y dangosir yn y cod canlynol.

php artisan make:middleware TerminateMiddleware

Unwaith y bydd y middleware yn cael ei greu app/Http/Middleware/TerminateMiddleware.php gadewch i ni addasu'r cod fel a ganlyn

<?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.";
   }
}

yn yr achos hwn mae gennym ddull handle a dull terminate gyda'r ddau baramedr $request e $response.

Nawr gadewch i ni gofrestru'r 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,
    ];

Nawr mae angen i ni greu'r rheolydd i efelychu'r ymateb

php artisan make:controller XYZController --plain

addasu cynnwys y dosbarth

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Nawr mae angen i ni olygu'r ffeil routes/web.php ychwanegu'r llwybrau sydd eu hangen i actifadu'r cais

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

ar y pwynt hwn gallwn roi cynnig ar yr enghraifft trwy ymweld â'r URL http://localhost:8000/terminate

ac yn y porwr byddwn yn gweld y llinellau canlynol

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Efallai yr hoffech chi hefyd:

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Erthyglau Diweddar

Mae Veeam yn cynnwys y gefnogaeth fwyaf cynhwysfawr ar gyfer ransomware, o amddiffyniad i ymateb ac adferiad

Bydd Coveware gan Veeam yn parhau i ddarparu gwasanaethau ymateb i ddigwyddiadau cribddeiliaeth seiber. Bydd Coveware yn cynnig galluoedd fforensig ac adfer…

23 2024 Ebrill

Chwyldro Gwyrdd a Digidol: Sut Mae Cynnal a Chadw Rhagfynegol yn Trawsnewid y Diwydiant Olew a Nwy

Mae gwaith cynnal a chadw rhagfynegol yn chwyldroi'r sector olew a nwy, gyda dull arloesol a rhagweithiol o reoli planhigion.…

22 2024 Ebrill

Rheoleiddiwr antitrust y DU yn codi larwm BigTech dros GenAI

Mae CMA y DU wedi cyhoeddi rhybudd am ymddygiad Big Tech yn y farchnad deallusrwydd artiffisial. Yno…

18 2024 Ebrill

Casa Green: chwyldro ynni ar gyfer dyfodol cynaliadwy yn yr Eidal

Mae'r Archddyfarniad "Achos Gwyrdd", a luniwyd gan yr Undeb Ewropeaidd i wella effeithlonrwydd ynni adeiladau, wedi dod â'i broses ddeddfwriaethol i ben gyda…

18 2024 Ebrill