makala

Laravel middleware jinsi inavyofanya kazi

Laravel middleware ni safu ya kati ya programu inayoingilia kati ombi la mtumiaji na jibu la programu.

Hii ina maana kwamba wakati mtumiaji (mtazamo wa Laravel) anafanya ombi kwa seva (Kidhibiti cha Laravel), ombi litapitia katikati. Kwa njia hii kifaa cha kati kinaweza kuangalia ikiwa ombi limethibitishwa au la: 

  • ikiwa ombi la mtumiaji limethibitishwa, ombi linatumwa kwa nyuma;
  • ikiwa ombi la mtumiaji halijathibitishwa, programu ya kati itaelekeza mtumiaji kwenye skrini ya kuingia.

Laravel inakuwezesha defimaliza na utumie vifaa vya ziada vya kati kutekeleza kazi mbalimbali isipokuwa uthibitishaji. 

Vifaa vya kati vya Laravel, kama vile uthibitishaji na ulinzi wa CSRF, ziko kwenye saraka app/Http/Middleware .

Kwa hiyo tunaweza kusema kwamba middleware ni kichujio cha ombi la http, kwa njia ambayo inawezekana kuthibitisha hali na kufanya vitendo.

Kutengeneza vifaa vya kati

Ili kuunda kifaa kipya cha kati tunaendesha amri ifuatayo:

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

Tunatengeneza middleware na tunaiita CheckAge, artisan atatujibu kama ifuatavyo:

Dirisha hapo juu linaonyesha kuwa programu ya kati imeundwa kwa mafanikio na jina " CheckAge ".

Ili kuona ikiwa CheckAge middleware imeundwa au la, nenda kwa mradi kwenye folda ya programu/Http/Middleware, na utaona faili mpya iliyoundwa.

Faili mpya iliyoundwa ina nambari ifuatayo

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

Tumia vifaa vya kati

Ili kutumia vifaa vya kati, tunahitaji kusajili.

Kuna aina mbili za vifaa vya kati katika Laravel:

  • Middleware globale
  • Route Middleware

Il vyombo vya kati vya kimataifa itatekelezwa kwa kila ombi la HTTP kutoka kwa programu, wakati faili ya Njia ya Kati itawekwa kwa njia maalum. Middleware inaweza kusajiliwa kwa app/Http/Kernel.php. Faili hii ina sifa mbili $middleware e $routeMiddleware . Mali ya $middleware inatumika kusajili vifaa vya kati vya kimataifa na umiliki $routeMiddleware hutumika kusajili vifaa vya kati vya njia mahususi.

Ili kusajili vifaa vya kati vya kimataifa, orodhesha darasa mwishoni mwa mali ya $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,
    ];

Ili kusajili vifaa vya kati vya njia mahususi, ongeza ufunguo na thamani kwenye kipengele cha $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,
    ];

Tumeunda CheckAge katika mfano uliopita. Sasa tunaweza kusajili hii katika mali ya njia ya kati. Nambari ya usajili kama huo imeonyeshwa hapa chini.

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

Vigezo vya vifaa vya kati

Tunaweza pia kupitisha vigezo na Middleware. 

Kwa mfano, ikiwa programu yako ina majukumu tofauti kama vile mtumiaji, msimamizi, msimamizi mkuu n.k. na unataka kuthibitisha hatua kulingana na jukumu, unaweza kuifanya kwa kupitisha vigezo na vifaa vya kati. 

Programu ya kati tuliyounda ina kazi ifuatayo, na tunaweza kupitisha hoja maalum baada ya hoja $ ijayo .

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

Sasa hebu tujaribu kuweka kigezo cha jukumu kwa kifaa kipya cha kati ambacho tutaunda kutoka mwanzo, kisha tuendelee kuunda Jukumu la Kati kwa kuendesha amri ifuatayo.

Badilisha njia ya kushughulikia kama ifuatavyo

<?php

namespace App\Http\Middleware;
use Closure;

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

tuliongeza parameter $role, na ndani ya njia mstari echo kuandika pato jina la jukumu.

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Sasa hebu tusajili programu ya kati ya RoleMiddleware kwa njia maalum

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

Sasa ili kujaribu vifaa vya kati na parameta, tunahitaji kuunda ombi na jibu. Ili kuiga jibu, hebu tuunde kidhibiti ambacho tutakiita TestController

php artisan make:controller TestController --plain

amri iliyotekelezwa hivi karibuni itaunda kidhibiti kipya ndani ya folda app/Http/TestController.php, na ubadilishe mbinu index na mstari 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.";
   }
}

Baada ya kuanzisha jibu, tunajenga ombi kwa kuhariri faili routes.phpkwa kuongeza route role

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

kwa hatua hii tunaweza kujaribu mfano kwa kutembelea URL http://localhost:8000/role

na katika kivinjari tutaona hizo mbili echo

Role editor
Test Controller

Vifaa vya kati vinavyoweza kusitisha

Il terminable Middleware hufanya baadhi ya kazi baada ya jibu kutumwa kwa kivinjari. Hii inaweza kupatikana kwa kuunda vifaa vya kati na njia kusitisha katikati. Il terminable Middleware lazima kusajiliwa na middleware kimataifa. Mbinu terminate atapokea hoja mbili $omba e Jibu la $. 

Njia Terminate lazima iundwe kama inavyoonyeshwa katika msimbo ufuatao.

php artisan make:middleware TerminateMiddleware

Mara tu kifaa cha kati kinaundwa app/Http/Middleware/TerminateMiddleware.php wacha turekebishe nambari kama ifuatavyo

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

katika kesi hii tunayo mbinu handle na mbinu terminate na vigezo viwili $request e $response.

Sasa hebu tusajili 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,
    ];

Sasa tunahitaji kuunda kidhibiti ili kuiga majibu

php artisan make:controller XYZController --plain

kurekebisha yaliyomo katika darasa

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

Sasa tunahitaji kuhariri faili routes/web.php kuongeza njia zinazohitajika ili kuwezesha ombi

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

kwa hatua hii tunaweza kujaribu mfano kwa kutembelea URL http://localhost:8000/terminate

na katika kivinjari tutaona mistari ifuatayo

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

Ercole Palmeri

Unaweza pia kama:

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Makala ya hivi karibuni

Uingiliaji wa Kibunifu katika Ukweli Ulioboreshwa, na mtazamaji wa Apple katika Catania Polyclinic

Operesheni ya ophthalmoplasty kwa kutumia kitazamaji cha kibiashara cha Apple Vision Pro ilifanywa katika Catania Polyclinic…

3 Mei 2024

Faida za Kurasa za Kuchorea kwa Watoto - ulimwengu wa uchawi kwa kila kizazi

Kukuza ujuzi mzuri wa magari kupitia kupaka rangi huwatayarisha watoto kwa ujuzi changamano zaidi kama vile kuandika. Kupaka rangi...

2 Mei 2024

Wakati Ujao Upo Hapa: Jinsi Sekta ya Usafirishaji Inavyofanya Mapinduzi katika Uchumi wa Kimataifa

Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...

1 Mei 2024

Wachapishaji na OpenAI hutia saini mikataba ya kudhibiti mtiririko wa taarifa zinazochakatwa na Intelligence Artificial Intelligence

Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…

Aprili 30 2024