Articles

Laravel middleware kuti inoshanda sei

Laravel middleware ndeye yepakati application layer inopindira pakati pechikumbiro chemushandisi nemhinduro yechishandiso.

Izvi zvinoreva kuti kana mushandisi (Laravel maonero) aita chikumbiro kune server (Laravel controller), chikumbiro chinoenda nepakati. Nenzira iyi iyo middleware inogona kutarisa kana chikumbiro chakavimbika kana kwete: 

  • kana chikumbiro chemushandisi chiri chokwadi, chikumbiro chinotumirwa kubackend;
  • kana chikumbiro chemushandisi chisina kutenderwa, iyo yepakati inotungamira mushandisi kune yekupinda skrini.

Laravel inobvumidza iwe defipedzisa uye shandisa yekuwedzera yepakati kuita mabasa akasiyana siyana kunze kwekusimbisa. 

Laravel middlewares, senge chokwadi uye CSRF dziviriro, dziri mudhairekitori app/Http/Middleware .

Naizvozvo tinogona kutaura kuti iyo yepakati ndeye http yekukumbira sefa, kuburikidza iyo inogoneka kuongorora mamiriro uye kuita zviito.

Kugadzira middleware

Kugadzira nyowani yepakati tinomhanyisa murairo unotevera:

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

Isu tinogadzira iyo middleware uye tinozvidaidza CheckAge, artisan achatipindura sezvinotevera:

Iwindo riri pamusoro rinoratidza kuti iyo yepakati yakagadzirwa zvakabudirira ine zita ” CheckAge ".

Kuti uone kana CheckAge middleware yagadzirwa kana kwete, enda kupurojekiti iri muapp/Http/Middleware forodha, uye uchaona faira richangobva kugadzirwa.

Iyo ichangobva kugadzirwa faira ine inotevera kodhi

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

Shandisa middleware

Kuti tishandise middleware, tinoda kuinyoresa.

Kune marudzi maviri epakati epakati muLaravel:

  • Middleware globale
  • Route Middleware

Il global middleware ichaitwa pachikumbiro cheHTTP chega chega kubva pachikumbiro, uku Nzira yeMiddleware ichagoverwa kune imwe nzira. Middleware inogona kunyoreswa pa app/Http/Kernel.php. Iri faira rine zvinhu zviviri $pakati e $nziraMiddleware . Iyo $middleware pfuma inoshandiswa kunyoresa pasi rose middleware uye muridzi $nziraMiddleware inoshandiswa kunyoresa nzira-yakananga middleware.

Kunyoresa global middleware, nyora kirasi panoperera $middleware pfuma.

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

Kunyoresa nzira-chaiyo yepakati, wedzera kiyi uye kukosha kune iyo $routeMiddleware pfuma.

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

Isu takagadzira CheckAge mumuenzaniso wapfuura. Isu tinogona ikozvino kunyoresa izvi mumiddleware nzira pfuma. Kodhi yekunyoresa kwakadaro inoratidzwa pazasi.

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 parameters

Isu tinogona zvakare kupfuudza paramita neMiddleware. 

Semuenzaniso, kana application yako iine mabasa akasiyana semushandisi, admin, super admin nezvimwe. uye iwe unoda kutendesa chiito chinoenderana nebasa, unogona kuzviita nekupfuura paramita nepakati. 

Iyo yepakati yatakagadzira ine inotevera basa, uye isu tinokwanisa kupasa tsika nharo mushure mekupokana $inotevera .

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

Zvino ngatiedzei kuseta iyo parameter kune nyowani yepakati yatichazogadzira kubva kutanga, tozoenderera mberi nekugadzira Role Middleware nekumhanyisa murairo unotevera.

Shandura nzira yekubata nenzira inotevera

<?php

namespace App\Http\Middleware;
use Closure;

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

takawedzera parameter $role, uye mukati menzira mutsara echo kunyora zvakabuda zita rebasa racho.

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.

Zvino ngatinyorei iyo RoleMiddleware middleware yeimwe nzira

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

Iye zvino kuyedza iyo yepakati neiyo parameter, isu tinofanirwa kugadzira chikumbiro nemhinduro. Kutevedzera mhinduro ngatigadzirei controller yatinodaidza TestController

php artisan make:controller TestController --plain

murairo uchangoitwa uchagadzira mutongi mutsva mukati mefolda app/Http/TestController.php, uye shandura nzira index nemutsara 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.";
   }
}

Mushure mekugadzirisa mhinduro, tinovaka chikumbiro nekugadzirisa faira routes.phpnekuwedzera the route role

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

panguva ino tinogona kuedza muenzaniso nekushanyira URL http://localhost:8000/role

uye mubrowser tichaona maviri echo

Role editor
Test Controller

Terminable Middleware

Il terminable Middleware inoita mamwe mabasa mushure mekunge mhinduro yatumirwa kubrowser. Izvi zvinogona kuwanikwa nekugadzira yepakati neiyo nzira kugumisa pakati. Il terminable Middleware inofanira kunyoreswa ne middleware global. Nzira terminate achagamuchira nharo mbiri $ request e $response. 

Maitiro Terminate inofanira kugadzirwa sezvinoratidzwa mukodhi inotevera.

php artisan make:middleware TerminateMiddleware

Kamwe iyo middleware inogadzirwa app/Http/Middleware/TerminateMiddleware.php ngatigadzirise kodhi sezvinotevera

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

munyaya iyi tine nzira handle uye nzira terminate nemaparameter maviri $request e $response.

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

Iye zvino tinoda kugadzira mutongi kuti atevedzere mhinduro

php artisan make:controller XYZController --plain

kugadzirisa zviri mukati mekirasi

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

Iye zvino tinoda kugadzirisa faira routes/web.php kuwedzera nzira dzinodiwa kuti chikumbiro chishande

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

panguva ino tinogona kuedza muenzaniso nekushanyira URL http://localhost:8000/terminate

uye mubrowser tichaona mitsara inotevera

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

Ercole Palmeri

Unogona zvakare kuda:

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.

Zvinyorwa zvekare

Ramangwana Rave Pano: Sei Iyo Indasitiri Yekutumira Inoshandura Hupfumi hwenyika

Chikamu chengarava isimba rechokwadi rehupfumi hwenyika, iro rakafamba richienda kumusika wemabhiriyoni zana nemakumi mashanu...

1 May 2024

Vaparidzi uye OpenAI vanosaina zvibvumirano zvekudzora kuyerera kweruzivo rwunogadziriswa neArtificial Intelligence.

Muvhuro wapfuura, iyo Financial Times yakazivisa chibvumirano neOpenAI. FT inopa marezinesi ayo epasi rose kutapa nhau…

30 April 2024

Kubhadhara Kwepamhepo: Heano Maitiro Ekufambisa masevhisi Anoita Kuti Ubhadhare Nekusingaperi

Mamirioni avanhu anobhadhara masevhisi ekutepfenyura, achibhadhara mari yekunyoresa pamwedzi. Ipfungwa yakajairika kuti iwe…

29 April 2024

Veeam inoratidzira yakanyatso tsigiro yerudzikinuro, kubva padziviriro kusvika pakupindura uye kupora

Coveware neVeeam icharamba ichipa cyber kubira chiitiko mhinduro masevhisi. Coveware ichapa forensics uye kugadzirisa kugona…

23 April 2024