Artikoli

Laravel middleware ka o si arụ ọrụ

Laravel middleware bụ oyi akwa ngwa etiti na-abanye n'etiti arịrịọ onye ọrụ na nzaghachi ngwa ahụ.

Nke a pụtara na mgbe onye ọrụ (Laravel view) na-arịọ arịrịọ na ihe nkesa (Laravel controller), arịrịọ ahụ ga-agafe na etiti etiti. Otu a middleware nwere ike ịlele ma ọ bụrụ na akwadoro arịrịọ a ma ọ bụ na ọ bụghị: 

  • ọ bụrụ na akwadoro arịrịọ onye ọrụ, a na-eziga arịrịọ ahụ na azụ azụ;
  • ọ bụrụ na akwadoghị arịrịọ onye ọrụ, middleware ga-emegharị onye ọrụ na ihuenyo nbanye.

Laravel na-enye gị ohere defimechaa ma jiri middleware agbakwunyere rụọ ọrụ dị iche iche ma ewezuga nkwenye. 

Laravel middlewares, dị ka nyocha na nchekwa CSRF, dị na ndekọ aha ngwa/Http/Middleware .

Ya mere, anyị nwere ike ịsị na middleware bụ ihe nzacha arịrịọ http, nke ọ ga-ekwe omume iji nyochaa ọnọdụ ma mee omume.

Ịmepụta middleware

Iji mepụta middleware ọhụrụ anyị na-agba iwu a:

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

Anyị na-eke middleware na anyị na-akpọ ya CheckAge, artisan ga-aza anyị otu a:

Window dị n'elu na-egosi na ejiri aha ya mee nke ọma na middleware. CheckAge ".

Iji hụ ma ọ bụrụ na emepụtara CheckAge middleware ma ọ bụ na ọ bụghị, gaa na ọrụ ahụ na folda ngwa / HTTP / Middleware, ị ga-ahụ faịlụ emepụtara ọhụrụ.

Faịlụ emepụtara ọhụrụ nwere koodu a

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

Jiri middleware

Iji jiri middleware, anyị kwesịrị ịdebanye aha ya.

Enwere ụdị middleware abụọ na Laravel:

  • Middleware globale
  • Route Middleware

Il Global middleware a ga-egbu na arịrịọ HTTP ọ bụla sitere na ngwa ahụ, ebe a Ụzọ Middleware a ga-ekenye ya n'otu ụzọ a kapịrị ọnụ. Enwere ike ịdebanye aha Middleware na ngwa/Http/Kernel.php. Faịlụ a nwere akụrụngwa abụọ $middware e $routeMiddleware . Ihe onwunwe $middware a na-eji edebanye aha etiti na ihe nwe ụwa $routeMiddleware a na-eji edebanye aha etiti-kpọmkwem ụzọ.

Ka ịdebanye aha middleware zuru ụwa ọnụ, depụta klaasị na njedebe nke ihe onwunwe $middware.

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

Ka ịdebanye aha etiti-kpọmkwem ụzọ, tinye igodo na uru na akụrụngwa $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,
    ];

Anyị kere CheckAge na ihe atụ gara aga. Anyị nwere ike ịdebanye aha nke a na ụlọ ụzọ etiti. Egosiri koodu maka ndebanye aha dị n'okpuru.

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

Anyị nwekwara ike ịgafe paramita na Middleware. 

Dịka ọmụmaatụ, ọ bụrụ na ngwa gị nwere ọrụ dị iche iche dị ka onye ọrụ, admin, super admin wdg. na ịchọrọ ịchọpụta ihe omume dabere na ọrụ ahụ, ị ​​​​nwere ike ime ya site na ịgafe paramita na middleware. 

Middleware anyị mepụtara nwere ọrụ ndị a, anyị nwere ike ịgafe arụmụka omenala mgbe arụmụka ahụ gasịrị $ ọzọ .

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

Ugbu a, ka anyị gbalịa ịtọ paramita ọrụ na etiti ọhụrụ nke anyị ga-emepụta site na ọkọ, wee gaba n'ihu mepụta Role Middleware site na iji iwu na-esonụ.

Gbanwee usoro aka dị ka ndị a

<?php

namespace App\Http\Middleware;
use Closure;

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

anyị gbakwunyere oke $role, na n'ime usoro ahịrị echo iji dee mmepụta aha ọrụ.

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.

Ugbu a, ka anyị deba aha RoleMiddleware middleware maka otu ụzọ

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

Ugbu a iji nwalee middleware na oke, anyị kwesịrị ịmepụta arịrịọ na nzaghachi. Iji megharịa nzaghachi ka anyị mepụta njikwa nke anyị ga-akpọ TestController

php artisan make:controller TestController --plain

iwu nke emezuru ga-emepụta onye njikwa ọhụrụ n'ime folda ahụ app/Http/TestController.php, ma gbanwee usoro index ya na ahịrị 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.";
   }
}

Mgbe ịtọlitechara nzaghachi, anyị na-ewu arịrịọ site na dezie faịlụ routes.phpsite n'ịgbakwunye route role

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

N'oge a anyị nwere ike ịnwale ihe atụ site na ịga na URL http://localhost:8000/role

na ihe nchọgharị anyị ga-ahụ abụọ echo

Role editor
Test Controller

Middleware nwere ike ịkwụsị

Il terminable Middleware na-arụ ọrụ ụfọdụ mgbe ezigara nzaghachi na ihe nchọgharị ahụ. Enwere ike nweta nke a site na ịmepụta etiti na usoro ahụ kwụsị na middleware. Il terminable Middleware ga-edebanye aha na middleware zuru ụwa ọnụ. Usoro terminate ga-enweta arụmụka abụọ arịrịọ $ e $ nzaghachi. 

Usoro Terminate ga-emepụta dị ka egosiri na koodu na-esonụ.

php artisan make:middleware TerminateMiddleware

Ozugbo emepụtara middleware app/Http/Middleware/TerminateMiddleware.php ka anyị gbanwee koodu dị ka ndị a

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

na nke a anyị nwere usoro handle na usoro terminate na abụọ parameters $request e $response.

Ugbu a, ka anyị debanye aha 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,
    ];

Ugbu a, anyị kwesịrị ịmepụta onye na-ahụ maka njikwa iji megharịa nzaghachi

php artisan make:controller XYZController --plain

na-agbanwe ọdịnaya nke klas ahụ

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

Ugbu a, anyị kwesịrị idezi faịlụ routes/web.php na-agbakwụnye ụzọ ndị achọrọ iji mee ka arịrịọ ahụ rụọ ọrụ

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

N'oge a anyị nwere ike ịnwale ihe atụ site na ịga na URL http://localhost:8000/terminate

na ihe nchọgharị anyị ga-ahụ ahịrị ndị a

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

Ercole Palmeri

Nwekwara ike ịchọrọ:

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.

Ihe odide ndị a

Veeam nwere nkwado zuru oke maka ransomware, site na nchedo ruo nzaghachi na mgbake

Coveware nke Veeam ga-aga n'ihu na-enye ọrụ nzaghachi ihe omume cyber. Coveware ga-enye forensics na ike mmezi…

23 April 2024

Mgbanwe Green na Dijitalụ: Otu amụma amụma si agbanwe ụlọ ọrụ mmanụ & gas

Ndozi amụma na-agbanwe mpaghara mmanụ & gas, na-enwe usoro ọhụrụ na ngwa ngwa maka njikwa ihe ọkụkụ.…

22 April 2024

Onye na-ahụ maka mgbochi ntụkwasị obi UK na-ewelite mkpu BigTech na GenAI

UK CMA enyela ịdọ aka ná ntị gbasara omume Big Tech na ahịa ọgụgụ isi. Ebe ahụ…

18 April 2024

Casa Green: mgbanwe ike maka ọdịnihu na-adigide na Italy

Iwu “Case Green”, nke European Union chepụtara iji kwalite nrụpụta ike nke ụlọ, ejirila…

18 April 2024