Articles

Laravel middleware ny fomba fiasa

Laravel middleware dia sosona fampiharana mpanelanelana izay miditra amin'ny fangatahan'ny mpampiasa sy ny valin'ny fampiharana.

Midika izany fa rehefa manao fangatahana amin'ny mpizara (Controler Laravel) ny mpampiasa (View Laravel), dia handeha amin'ny middleware ny fangatahana. Amin'izany fomba izany ny middleware dia afaka manamarina raha voamarina ny fangatahana na tsia: 

  • raha voamarina ny fangatahan'ny mpampiasa dia alefa any amin'ny backend ny fangatahana;
  • raha tsy voamarina ny fangatahan'ny mpampiasa, ny middleware dia hamindra ny mpampiasa amin'ny efijery fidirana.

Laravel dia mamela anao defifarano ary ampiasao middleware fanampiny hanaovana asa isan-karazany afa-tsy ny fanamarinana. 

Laravel middlewares, toy ny fanamarinana sy ny fiarovana CSRF, dia hita ao amin'ny lahatahiry app/Http/Middleware .

Noho izany dia afaka milaza isika fa ny middleware dia sivana fangatahana http, izay ahafahana manamarina ny fepetra sy manao hetsika.

Mamorona middleware

Mba hamoronana middleware vaovao dia manao izao baiko manaraka izao izahay:

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

Mamorona ny middleware ary antsoinay izany CheckAge, artisan dia hamaly antsika toy izao:

Ny varavarankely etsy ambony dia mampiseho fa ny middleware dia vita soa aman-tsara amin'ny anarana " CheckAge ".

Raha te hahita raha noforonina na tsia ny middleware CheckAge dia mandehana any amin'ny tetikasa ao amin'ny fampirimana app/Http/Middleware, dia ho hitanao ilay rakitra vao noforonina.

Ny rakitra vao noforonina dia manana ny code manaraka

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

Ampiasao middleware

Raha hampiasa middleware dia mila misoratra anarana isika.

Misy karazany roa ny middleware ao amin'ny Laravel:

  • Middleware globale
  • Route Middleware

Il global middleware dia hotanterahina amin'ny fangatahana HTTP rehetra avy amin'ny fampiharana, raha ny Route Middleware dia homena lalana manokana. Middleware dia azo misoratra anarana amin'ny app/Http/Kernel.php. Ity rakitra ity dia misy fananana roa $ middleware e $routeMiddleware . Ny fananana $ middleware dia ampiasaina hanoratana ny middleware sy ny fananana manerantany $routeMiddleware dia ampiasaina amin'ny fisoratana anarana middleware manokana lalana.

Raha te hisoratra anarana amin'ny middleware manerantany, tanisao ny kilasy amin'ny faran'ny fananana $ 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,
    ];

Raha te hisoratra anarana middleware manokana momba ny lalana, ampio ny lakile sy sanda amin'ny fananana $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,
    ];

Namorona izahay CheckAge amin'ny ohatra teo aloha. Afaka misoratra anarana izany amin'ny fananana route middleware isika izao. Ny kaody ho an'ny fisoratana anarana toy izany dia aseho eto ambany.

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

Parameter Middleware

Afaka mandalo masontsivana miaraka amin'ny Middleware ihany koa isika. 

Ohatra, raha manana andraikitra samihafa ny fampiharanao toy ny mpampiasa, admin, super admin sns. ary te hanamarina ny hetsika mifototra amin'ny anjara asa ianao dia azonao atao izany amin'ny alàlan'ny fampitaovana ireo paramètres miaraka amin'ny middleware. 

Ny middleware noforoninay dia ahitana ity asa manaraka ity, ary afaka mampita hevitra mahazatra isika aorian'ny adihevitra $manaraka .

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

Andeha isika izao hanandrana hametraka ny paramètre anjara amin'ny middleware vaovao izay hoforonintsika manomboka amin'ny scratch, dia tohizo ny famoronana Role Middleware amin'ny alàlan'ny baiko manaraka.

Ovay ny fomba fitantanany toy izao manaraka izao

<?php

namespace App\Http\Middleware;
use Closure;

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

nampiana ny paramètre izahay $role, ary ao anatin'ny fomba ny tsipika echo mba hanoratana ny vokatra ny anaran`ny anjara.

Gazety fanavaozana
Aza adino ny vaovao manan-danja indrindra momba ny fanavaozana. Misoratra anarana handray azy ireo amin'ny mailaka.

Andeha isika hisoratra anarana ny RoleMiddleware middleware ho an'ny lalana manokana

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

Ankehitriny mba hitsapana ny middleware miaraka amin'ny parameter, mila mamorona fangatahana sy valiny isika. Mba hanahafana ny valin-teny dia andao hamorona ny controller izay antsoina hoe TestController

php artisan make:controller TestController --plain

ny baiko vao vita dia hamorona mpanara-maso vaovao ao anaty lahatahiry app/Http/TestController.php, ary ovay ny fomba index miaraka amin'ny tsipika 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.";
   }
}

Aorian'ny fametrahana ny valinteny dia manorina ny fangatahana amin'ny alàlan'ny fanitsiana ny rakitra routes.phpamin'ny fampidirana ny route role

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

Amin'izao fotoana izao dia afaka manandrana ny ohatra isika amin'ny fitsidihana ny URL http://localhost:8000/role

ary ao amin'ny navigateur dia ho hitantsika izy roa echo

Role editor
Test Controller

Middleware azo atsahatra

Il terminable Middleware manao asa sasany aorian'ny fandefasana ny valiny amin'ny navigateur. Izany dia azo atao amin'ny famoronana middleware miaraka amin'ny fomba mifarana amin'ny middleware. Il terminable Middleware tsy maintsy misoratra anarana amin'ny middleware maneran-tany. Ny fomba terminate hahazo hevitra roa $ fangatahana e $valiny. 

Ny fomba Terminate dia tsy maintsy noforonina araka ny asehon'ity code manaraka ity.

php artisan make:middleware TerminateMiddleware

Rehefa vita ny middleware app/Http/Middleware/TerminateMiddleware.php andao hanova ny kaody toy izao manaraka izao

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

amin'ity tranga ity dia manana fomba handle ary fomba iray terminate miaraka amin'ireo paramètre roa $request e $response.

Andeha isika hisoratra anarana ny 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,
    ];

Amin'izao fotoana izao dia mila mamorona ny controller isika mba hanao simulate ny valiny

php artisan make:controller XYZController --plain

manova ny votoatin'ny kilasy

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

Ankehitriny dia mila manova ny rakitra isika routes/web.php manampy ny lalana ilaina mba hampavitrika ny fangatahana

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

Amin'izao fotoana izao dia afaka manandrana ny ohatra isika amin'ny fitsidihana ny URL http://localhost:8000/terminate

ary ao amin'ny navigateur dia ho hitantsika ireto andalana manaraka ireto

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

Ercole Palmeri

Azonao atao koa ny:

Gazety fanavaozana
Aza adino ny vaovao manan-danja indrindra momba ny fanavaozana. Misoratra anarana handray azy ireo amin'ny mailaka.

Lahatsoratra vao haingana

Veeam dia manasongadina ny fanohanana feno indrindra ho an'ny ransomware, manomboka amin'ny fiarovana ka hatramin'ny famaliana sy ny fanarenana

Ny Coveware avy amin'i Veeam dia hanohy hanome tolotra famaliana trangan-javatra an-tserasera. Ny Coveware dia hanolotra fahaiza-manao forensika sy fanavaozana…

23 Aprily 2024

Revolisiona Maitso sy Nomerika: Ahoana no fiovan'ny Fikojakojana mialoha ny indostrian'ny solika sy ny entona

Ny fikojakojana mialoha dia manova ny sehatry ny solika sy entona, miaraka amin'ny fomba fiasa vaovao sy mavitrika amin'ny fitantanana orinasa.…

22 Aprily 2024

Ny mpandrindra antitrust UK dia nanangana fanairana BigTech momba ny GenAI

Ny UK CMA dia namoaka fampitandremana momba ny fihetsik'i Big Tech amin'ny tsenan'ny faharanitan-tsaina artifisialy. Ery…

18 Aprily 2024

Casa Green: revolisiona angovo ho an'ny hoavy maharitra any Italia

Ny didim-panjakana "Case Green", novolavolain'ny Vondrona Eoropeana mba hanatsarana ny fahombiazan'ny angovo amin'ny trano, dia namarana ny fizotrany lalàna miaraka amin'ny…

18 Aprily 2024