amanqaku

I-Laravel middleware isebenza njani

ILaravel middleware ngumaleko wesicelo ophakathi ongenelela phakathi kwesicelo somsebenzisi kunye nempendulo yesicelo.

Oku kuthetha ukuba xa umsebenzisi (umbono weLaravel) wenza isicelo kumncedisi (umlawuli weLaravel), isicelo siya kuhamba nge-middleware. Ngale ndlela i-middleware inokukhangela ukuba ngaba isicelo siqinisekisiwe okanye hayi: 

  • ukuba isicelo somsebenzisi siqinisekisiwe, isicelo sithunyelwa ngasemva;
  • ukuba isicelo somsebenzisi asivunywanga, i-middleware izakuphinda iqondise umsebenzisi kwikhusi yokungena.

ILaravel ikuvumela ukuba wenze defiGqiba kwaye usebenzise i-middleware eyongezelelweyo ukwenza imisebenzi eyahlukeneyo ngaphandle kobunyani. 

I-Laravel middlewares, njengobungqina kunye nokhuseleko lwe-CSRF, zibekwe kuluhlu app/Http/Middleware .

Ngoko ke sinokuthi i-middleware sisihluzo sesicelo se-http, apho kunokwenzeka ukuba uqinisekise iimeko kunye nokwenza izenzo.

Ukudala i-middleware

Ukwenza i-middleware entsha siqhuba lo myalelo ulandelayo:

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

Senza i middleware kwaye siyibiza CheckAge, artisan iya kusiphendula ngolu hlobo lulandelayo:

Ifestile engasentla ibonisa ukuba i-middleware yenziwe ngempumelelo ngegama " CheckAge ".

Ukubona ukuba i-CheckAge middleware yenziwe okanye hayi, yiya kwiprojekthi ekwi-app/Http/Middleware ulawulo, kwaye uya kubona ifayile eyenziwe ngokutsha.

Ifayile entsha eyenziweyo inekhowudi 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

Ukusebenzisa i-middleware, kufuneka siyibhalise.

Kukho iintlobo ezimbini ze-middleware eLaravel:

  • Middleware globale
  • Route Middleware

Il i-middleware yehlabathi izakwenziwa kwisicelo ngasinye seHTTP kwisicelo, ngelixa i Indlela ephakathi izakwabelwa kwindlela ethile. I-Middleware inokubhaliswa kwi app/Http/Kernel.php. Le fayile ineempawu ezimbini $middleware e $ umzilaMiddleware . Ipropathi ye-$middleware isetyenziselwa ukubhalisa i-middleware yehlabathi kunye nobunini $ umzilaMiddleware isetyenziselwa ukubhalisa i-middleware ethile.

Ukubhalisa i-middleware jikelele, dwelisa iklasi ekupheleni kwepropathi 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,
    ];

Ukubhalisa i-middleware ethile, yongeza isitshixo kunye nexabiso kwipropathi ye-routeMiddleware ye-$.

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

Sakha CheckAge kumzekelo odlulileyo. Ngoku singabhalisa oku kwipropathi yendlela ephakathi. Ikhowudi yobhaliso olunjalo iboniswe ngezantsi.

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

Imilinganiselo ye-Middleware

Singakwazi kwakhona ukudlula iiparamitha nge-Middleware. 

Umzekelo, ukuba isicelo sakho sineendima ezahlukeneyo njengomsebenzisi, umlawuli, umphathi omkhulu njl. kwaye ufuna ukungqinisisa intshukumo esekwe kwindima, ungayenza ngokugqithisa iiparameters nge middleware. 

I-middleware esiyidalileyo iqulethe umsebenzi olandelayo, kwaye sinokudlula iingxoxo zesiko emva kwengxabano $okulandelayo .

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

Ngoku makhe sizame ukuseta indima yeparameter kwisixhobo esiphakathi esitsha esiza kuyenza ukusuka ekuqaleni, emva koko siqhubele phambili ukwenza iNdawo ePhakathi ngokwenza lo myalelo ulandelayo.

Guqula indlela yokubamba ngolu hlobo lulandelayo

<?php

namespace App\Http\Middleware;
use Closure;

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

songeze iparameter $role, kwaye ngaphakathi kwendlela umgca echo ukubhala isiphumo igama lendima.

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Ngoku masibhalise i-RoleMiddleware middleware kwindlela 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,
    ];

Ngoku ukuvavanya i-middleware ngeparameter, kufuneka senze isicelo kunye nempendulo. Ukulinganisa impendulo masenze isilawuli esiya kuthi sibize iTestController

php artisan make:controller TestController --plain

Umyalelo osanda kuphunyezwa uzakwenza umlawuli omtsha ngaphakathi kwisilawulo app/Http/TestController.php, kwaye utshintshe indlela index ngomgca 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.";
   }
}

Emva kokumisela impendulo, sakha isicelo ngokuhlela ifayile routes.phpngokongeza i route role

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

kweli nqanaba sinokuzama umzekelo ngokundwendwela i-URL http://localhost:8000/role

kwaye kwisikhangeli siza kubona ezi zimbini echo

Role editor
Test Controller

Isixhobo esiphakathi esiphelisayo

Il terminable Middleware yenza eminye imisebenzi emva kokuba impendulo ithunyelwe kwisikhangeli. Oku kunokufezekiswa ngokudala i-middleware kunye nendlela phelisa kwi-middleware. Il terminable Middleware kufuneka ibhaliswe kunye middleware jikelele. Indlela terminate uya kufumana iingxoxo ezimbini Isicelo se-$ e $ impendulo. 

Indlela Terminate kufuneka yenziwe njengoko kubonisiwe kule khowudi ilandelayo.

php artisan make:middleware TerminateMiddleware

Nje ukuba i-middleware yenziwe app/Http/Middleware/TerminateMiddleware.php masiyiguqule ikhowudi ngolu hlobo lulandelayo

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

kule meko sinendlela handle kunye nendlela terminate ngeeparamitha ezimbini $request e $response.

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

Ngoku kufuneka senze umlawuli ukulinganisa impendulo

php artisan make:controller XYZController --plain

ukulungisa imixholo yeklasi

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

Ngoku kufuneka sihlele ifayile routes/web.php Ukongeza iindlela ezifunekayo ukwenza isicelo sisebenze

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

kweli nqanaba sinokuzama umzekelo ngokundwendwela i-URL http://localhost:8000/terminate

kwaye kwisikhangeli siya kubona le migca ilandelayo

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

Ercole Palmeri

Unokuthanda:

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Amanqaku amva

Izibonelelo zamaphepha okufaka imibala kuBantwana-ihlabathi lomlingo kuyo yonke iminyaka

Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...

2 Meyi 2024

Ikamva lilapha: Njani iShishini lokuThumela liTshintsha uQoqosho lweHlabathi

Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...

1 Meyi 2024

Abapapashi kunye ne-OpenAI batyikitya izivumelwano zokulawula ukuhamba kolwazi oluqhutywe yiArtificial Intelligence

NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…

30 Aprili 2024

Iintlawulo ze-Intanethi: Nantsi indlela Iinkonzo zokusasaza ezikwenza ukuba uHlawule ngonaphakade

Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…

29 Aprili 2024