Atik

Laravel middleware ki jan li fonksyone

Laravel middleware se yon kouch aplikasyon entèmedyè ki entèvni ant demann itilizatè a ak repons aplikasyon an.

Sa vle di ke lè itilizatè a (Laravel View) fè yon demann nan sèvè a (Laravel kontwolè), demann lan pral pase nan middleware la. Nan fason sa a middleware a ka tcheke si demann lan otantifye oswa ou pa: 

  • si demann itilizatè a otantifye, yo voye demann lan nan backend la;
  • si demann itilizatè a pa otantifye, middleware a pral redireksyon itilizatè a nan ekran an konekte.

Laravel pèmèt ou defifini epi sèvi ak middleware adisyonèl pou fè yon varyete travay eksepte otantifikasyon. 

Middlewares Laravel, tankou otantifikasyon ak pwoteksyon CSRF, yo sitiye nan anyè a app/Http/Middleware .

Se poutèt sa, nou ka di ke middleware a se yon filtè demann http, atravè ki li posib pou verifye kondisyon yo ak fè aksyon.

Kreye middleware

Pou kreye yon nouvo middleware nou kouri lòd sa a:

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

Nou kreye a middleware epi nou rele li CheckAge, artisan pral reponn nou jan sa a:

Fenèt ki anwo a montre ke middleware la te kreye avèk siksè ak non an " CheckAge ".

Pou wè si CheckAge middleware la kreye oswa ou pa, ale nan pwojè a nan katab app/Http/Middleware, epi w ap wè dosye ki fèk kreye a.

Fichye ki fèk kreye a gen kòd sa 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);
    }
}

Sèvi ak middleware

Pou itilize middleware, nou bezwen anrejistre li.

Gen de kalite middleware nan Laravel:

  • Middleware globale
  • Route Middleware

Il middleware mondyal pral egzekite sou chak demann HTTP nan aplikasyon an, pandan y ap la Route Middleware yo pral asiyen nan yon chemen espesifik. Middleware ka anrejistre nan app/Http/Kernel.php. Fichye sa a gen de pwopriyete $ middleware e $routeMiddleware . Pwopriyete $middleware la yo itilize pou anrejistre middleware mondyal ak pwopriyetè $routeMiddleware yo itilize pou anrejistre middleware wout espesifik.

Pou enskri mondyal middleware, lis klas la nan fen pwopriyete $middleware la.

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

Pou anrejistre middleware espesifik wout la, ajoute kle a ak valè nan pwopriyete $routeMiddleware la.

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

Nou te kreye CheckAge nan egzanp anvan an. Nou kapab kounye a anrejistre sa a nan pwopriyete a wout middleware. Kòd pou yon enskripsyon sa yo montre anba a.

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

Paramèt middleware

Nou kapab tou pase paramèt ak Middleware. 

Pou egzanp, si aplikasyon w lan gen wòl diferan tankou itilizatè, admin, super admin elatriye. epi ou vle otantifye aksyon an ki baze sou wòl la, ou ka fè li pa pase paramèt yo ak middleware la. 

Middleware nou kreye a gen fonksyon sa a, epi nou ka pase agiman koutim apre agiman an $apre .

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

Koulye a, ann eseye mete paramèt wòl nan yon nouvo middleware ke nou pral kreye nan grafouyen, Lè sa a, kontinye pou kreye Role Middleware nan kouri lòd sa a.

Modifye metòd manch lan jan sa a

<?php

namespace App\Http\Middleware;
use Closure;

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

nou te ajoute paramèt la $role, ak andedan metòd la liy lan echo ekri pwodiksyon an non wòl la.

Bilten inovasyon
Pa rate nouvèl ki pi enpòtan sou inovasyon. Enskri pou resevwa yo pa imel.

Koulye a, ann anrejistre middleware RoleMiddleware pou yon chemen espesifik

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

Koulye a, teste middleware a ak paramèt la, nou bezwen kreye yon demann ak yon repons. Pou simulation repons lan, ann kreye kontwolè a ke nou pral rele TestController

php artisan make:controller TestController --plain

kòmandman an jis egzekite pral kreye yon nouvo kontwolè andedan katab la app/Http/TestController.php, epi chanje metòd la index ak liy lan 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.";
   }
}

Apre mete repons lan, nou bati demann lan pa koreksyon dosye a routes.phppa ajoute a route role

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

nan pwen sa a nou ka eseye egzanp lan lè w vizite URL la http://localhost:8000/role

ak nan navigatè a nou pral wè de la echo

Role editor
Test Controller

Terminable Middleware

Il terminable Middleware fè kèk travay apre yo fin voye repons lan nan navigatè a. Sa a ka reyalize pa kreye yon middleware ak metòd la fini nan middleware la. Il terminable Middleware dwe anrejistre ak la middleware mondyal. Metòd la terminate pral resevwa de agiman $demann e $repons. 

Metòd la Terminate dwe kreye jan yo montre nan kòd sa a.

php artisan make:middleware TerminateMiddleware

Yon fwa yo kreye middleware la app/Http/Middleware/TerminateMiddleware.php ann modifye kòd la jan sa 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.";
   }
}

nan ka sa a nou gen yon metòd handle ak yon metòd terminate ak de paramèt yo $request e $response.

Koulye a, ann anrejistre Middleware la

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

Koulye a, nou bezwen kreye kontwolè a simulation repons lan

php artisan make:controller XYZController --plain

modifye sa ki nan klas la

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

Koulye a, nou bezwen edite fichye a routes/web.php ajoute wout ki nesesè pou aktive demann lan

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

nan pwen sa a nou ka eseye egzanp lan lè w vizite URL la http://localhost:8000/terminate

ak nan navigatè a nou pral wè liy sa yo

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

Ercole Palmeri

Ou ta ka renmen tou:

Bilten inovasyon
Pa rate nouvèl ki pi enpòtan sou inovasyon. Enskri pou resevwa yo pa imel.

Recent Articles

Regilatè antitrust UK ogmante alam BigTech sou GenAI

UK CMA te bay yon avètisman sou konpòtman Big Tech nan mache entèlijans atifisyèl la. La…

18 Avril 2024

Casa Green: revolisyon enèji pou yon avni dirab nan peyi Itali

Dekrè "Case Green", ki te fòme pa Inyon Ewopeyen an pou amelyore efikasite enèji nan bilding yo, te konkli pwosesis lejislatif li yo ak...

18 Avril 2024

Ecommerce nan peyi Itali nan + 27% dapre nouvo Rapò a pa Casaleggio Associati

Rapò anyèl Casaleggio Associati a sou Ecommerce nan peyi Itali prezante. Rapò ki rele "AI-Commerce: fwontyè Ecommerce ak entèlijans atifisyèl"....

17 Avril 2024

Lide briyan: Bandalux prezante Airpure®, rido ki pirifye lè a

Rezilta nan inovasyon konstan teknolojik ak angajman nan anviwònman an ak byennèt moun yo. Bandalux prezante Airpure®, yon tant...

12 Avril 2024