Izihloko

I-Laravel middleware ukuthi isebenza kanjani

I-Laravel middleware isendlalelo sohlelo lokusebenza esimaphakathi esingenela phakathi kwesicelo somsebenzisi kanye nempendulo yohlelo lokusebenza.

Lokhu kusho ukuthi uma umsebenzisi (ukubuka kwe-Laravel) enza isicelo kuseva (isilawuli se-Laravel), isicelo sizodlula ku-middleware. Ngale ndlela i-middleware ingabheka ukuthi isicelo siqinisekisiwe noma cha: 

  • uma isicelo somsebenzisi siqinisekisiwe, isicelo sithunyelwa ku-backend;
  • uma isicelo somsebenzisi singagunyaziwe, i-middleware izoqondisa kabusha umsebenzisi esikrinini sokungena.

I-Laravel ikuvumela ukuba wenze kanjalo definire futhi usebenzise i-middleware eyengeziwe ukwenza imisebenzi eyahlukene ngaphandle kokuqinisekisa. 

I-Laravel middlewares, njengokufakazela ubuqiniso nokuvikelwa kwe-CSRF, itholakala ohlwini lwemibhalo uhlelo lokusebenza/Http/Middleware .

Ngakho-ke singasho ukuthi i-middleware iyisihlungi sesicelo se-http, lapho kungenzeka khona ukuqinisekisa izimo nokwenza izenzo.

Idala i-middleware

Ukwakha i-middleware entsha sisebenzisa umyalo olandelayo:

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

Sakha i- middleware futhi siyayibiza CheckAge, artisan uzosiphendula kanje:

Iwindi elingenhla libonisa ukuthi i-middleware idalwe ngempumelelo negama ” I-CheckAge ".

Ukuze ubone ukuthi i-middleware ye-CheckAge idaliwe noma cha, hamba kuphrojekthi kufolda yohlelo lokusebenza/Http/Middleware, futhi uzobona ifayela elisanda kwakhiwa.

Ifayela elisanda kwakhiwa linekhodi elandelayo

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

Sebenzisa i-middleware

Ukuze sisebenzise i-middleware, sidinga ukuyibhalisa.

Kunezinhlobo ezimbili ze-middleware e-Laravel:

  • Middleware globale
  • Route Middleware

Il global middleware izokwenziwa kuzo zonke izicelo ze-HTTP kusuka kuhlelo lokusebenza, ngenkathi i- Umzila Middleware izonikezwa indlela ethile. I-Middleware ingabhaliswa ku- app/Http/Kernel.php. Leli fayela liqukethe izici ezimbili $middleware e $RouteMiddleware . Impahla ye-$middleware isetshenziselwa ukubhalisa i-global middleware kanye nobunikazi $RouteMiddleware isetshenziselwa ukubhalisa i-middleware eqondene nomzila.

Ukuze ubhalise i-global middleware, faka ikilasi ohlwini ekugcineni kwempahla ye-$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,
    ];

Ukuze ubhalise i-middleware eqondene nomzila, engeza ukhiye kanye nenani esakhiweni se-$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,
    ];

Sakhile I-CheckAge esibonelweni sangaphambilini. Manje singabhalisa lokhu endaweni yomzila we-middleware. Ikhodi yokubhalisa okunjalo iboniswe ngezansi.

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

Imingcele ye-Middleware

Singakwazi futhi ukudlulisa amapharamitha nge-Middleware. 

Isibonelo, uma uhlelo lwakho lokusebenza lunezindima ezihlukile ezifana nomsebenzisi, umlawuli, umphathi omkhulu njll. futhi ufuna ukugunyaza isenzo ngokusekelwe endimeni, ungakwenza ngokudlula amapharamitha nge-middleware. 

I-middleware esiyidalile iqukethe umsebenzi olandelayo, futhi singadlulisa ama-agumenti ngokwezifiso ngemva kwengxabano $okulandelayo .

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

Manje ake sizame ukusetha ipharamitha yendima ku-middleware entsha esizoyakha kusukela ekuqaleni, bese siqhubeka nokwakha I-Role Middleware ngokusebenzisa umyalo olandelayo.

Lungisa indlela yokubamba kanje

<?php

namespace App\Http\Middleware;
use Closure;

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

sengeze ipharamitha $role, futhi ngaphakathi kwendlela umugqa echo ukubhala okukhiphayo igama lendima.

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Manje ake sibhalise i-middleware ye-RoleMiddleware ukuze uthole indlela ethile

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

Manje ukuhlola i-middleware ngepharamitha, sidinga ukudala isicelo nempendulo. Ukuze silingise impendulo masidale isilawuli esizosibiza nge-TestController

php artisan make:controller TestController --plain

umyalo osanda kukhishwa uzodala isilawuli esisha ngaphakathi kwefolda app/Http/TestController.php, futhi ushintshe indlela index ngomugqa 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.";
   }
}

Ngemva kokusetha impendulo, sakha isicelo ngokuhlela ifayela routes.phpngokwengeza i route role

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

kuleli qophelo singazama isibonelo ngokuvakashela i-URL http://localhost:8000/role

futhi kusiphequluli sizobona okubili echo

Role editor
Test Controller

I-Enterminable Middleware

Il terminable Middleware yenza eminye imisebenzi ngemva kokuthunyelwa kwempendulo esipheqululini. Lokhu kungafinyelelwa ngokwakha i-middleware ngendlela qeda ku-middleware. Il terminable Middleware kumele ibhaliswe ne middleware global. Indlela terminate uzothola izimpikiswano ezimbili $isicelo e $impendulo. 

Indlela Terminate kufanele idalwe njengoba kukhonjisiwe kukhodi elandelayo.

php artisan make:middleware TerminateMiddleware

Uma i-middleware idaliwe app/Http/Middleware/TerminateMiddleware.php ake siguqule ikhodi ngendlela elandelayo

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

kulokhu sinendlela handle kanye nendlela terminate namapharamitha amabili $request e $response.

Manje ake sibhalise i-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,
    ];

Manje sidinga ukudala isilawuli ukuze silingise impendulo

php artisan make:controller XYZController --plain

ukuguqula okuqukethwe kwekilasi

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

Manje sidinga ukuhlela ifayela routes/web.php ingeza imizila edingekayo ukuze wenze isicelo sisebenze

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

kuleli qophelo singazama isibonelo ngokuvakashela i-URL http://localhost:8000/terminate

futhi kusiphequluli sizobona imigqa elandelayo

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

Ercole Palmeri

Ungahle uthande:

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Izihloko zakamuva

I-Veeam ifaka ukusekelwa okuphelele kakhulu kwe-ransomware, kusukela ekuvikelweni kuya ekuphenduleni nasekululameni

I-Coveware ye-Veeam izoqhubeka nokuhlinzeka ngezinsizakalo zokuphendula izigameko zokuntshontshwa kwe-inthanethi. I-Coveware izohlinzeka ngama-forensics kanye nekhono lokulungisa…

23 April 2024

Inguquko Eluhlaza Nedijithali: Indlela Ukugcinwa Okubikezelwayo Kuyiguqula Kanjani Imboni Kawoyela Negesi

Ukulungiswa okuqagelayo kuguqula umkhakha kawoyela negesi, ngendlela emisha nesebenzayo yokuphatha izitshalo.…

22 April 2024

Isilawuli se-antitrust sase-UK siphakamisa i-alamu ye-BigTech nge-GenAI

I-CMA yase-UK ikhiphe isexwayiso mayelana nokuziphatha kwe-Big Tech emakethe yezobunhloli bokwenziwa. Lapho…

18 April 2024

I-Casa Green: inguquko yamandla yekusasa elisimeme e-Italy

Isinqumo esithi "Case Green", esakhiwe yi-European Union ukuze kuthuthukiswe ukusebenza kahle kwamandla ezakhiwo, siphothule inqubo yaso yomthetho ngokuthi...

18 April 2024