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

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

Malipo ya Mtandaoni: Hivi Ndivyo Huduma za Utiririshaji Hukufanya Ulipe Milele

Mamilioni ya watu hulipia huduma za utiririshaji, kulipa ada za usajili za kila mwezi. Ni maoni ya kawaida kwamba wewe…

Aprili 29 2024

Veeam inaangazia usaidizi wa kina zaidi wa ransomware, kutoka kwa ulinzi hadi majibu na uokoaji

Coveware by Veeam itaendelea kutoa huduma za kukabiliana na matukio ya ulaghai mtandaoni. Coveware itatoa uwezo wa uchunguzi na urekebishaji…

Aprili 23 2024

Mapinduzi ya Kijani na Kidijitali: Jinsi Matengenezo Yanayotabirika yanavyobadilisha Sekta ya Mafuta na Gesi

Matengenezo ya kitabiri yanaleta mapinduzi katika sekta ya mafuta na gesi, kwa mbinu bunifu na makini ya usimamizi wa mitambo.…

Aprili 22 2024