Ìwé

Laravel middleware bi o ti ṣiṣẹ

Laravel middleware jẹ ipele agbedemeji ohun elo ti o laja laarin ibeere olumulo ati esi ohun elo naa.

Eyi tumọ si pe nigbati olumulo (Wiwo Laravel) ṣe ibeere si olupin (oluṣakoso Laravel), ibeere naa yoo lọ nipasẹ agbedemeji agbedemeji. Ni ọna yii ẹrọ agbedemeji le ṣayẹwo boya ibeere naa jẹ ijẹrisi tabi rara: 

  • ti ibeere olumulo ba jẹ otitọ, ibeere naa ni a firanṣẹ si ẹhin;
  • ti ibeere olumulo ko ba jẹ otitọ, agbedemeji yoo ṣe atunṣe olumulo si iboju iwọle.

Laravel faye gba o lati definire ati lo afikun agbedemeji agbedemeji lati ṣe ọpọlọpọ awọn iṣẹ-ṣiṣe ayafi ijẹrisi. 

Awọn agbedemeji Laravel, gẹgẹbi ijẹrisi ati aabo CSRF, wa ninu itọsọna naa app/Http/Middleware .

Nitorinaa a le sọ pe middleware jẹ àlẹmọ ibeere http, nipasẹ eyiti o ṣee ṣe lati rii daju awọn ipo ati ṣe awọn iṣe.

Ṣiṣẹda middleware

Lati ṣẹda agbedemeji agbedemeji tuntun a nṣiṣẹ aṣẹ wọnyi:

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

A ṣẹda awọn middleware a si pe e CheckAge, artisan yoo dahun wa bi wọnyi:

Ferese ti o wa loke fihan pe a ti ṣẹda agbedemeji agbedemeji pẹlu orukọ ” Ṣayẹwo Ọjọ ori ".

Lati rii boya CheckAge middleware ti ṣẹda tabi rara, lọ si iṣẹ akanṣe ni app/Http/Middleware folda, iwọ yoo rii faili tuntun ti a ṣẹda.

Faili tuntun ti o ṣẹda ni koodu atẹle

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

Lo middleware

Lati lo middleware, a nilo lati forukọsilẹ.

Awọn oriṣi meji ti middleware wa ni Laravel:

  • Middleware globale
  • Route Middleware

Il agbaye middleware yoo wa ni executed lori gbogbo HTTP ìbéèrè lati awọn ohun elo, nigba ti Route Middleware yoo wa ni sọtọ si kan pato ona. Middleware le forukọsilẹ ni app/Http/Kernel.php. Faili yii ni awọn ohun-ini meji ninu $middelware e $ RouteMiddleware . Ohun ini $midlware ti wa ni lo lati forukọsilẹ agbaye middleware ati nini $ RouteMiddleware ti wa ni lo lati forukọsilẹ ipa-pato middleware.

Lati forukọsilẹ agbaye middleware, ṣe atokọ kilasi ni opin ohun-ini $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,
    ];

Lati forukọsilẹ ipa-pato middleware, ṣafikun bọtini ati iye si ohun-ini $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,
    ];

A ṣẹda Ṣayẹwo Ọjọ ori ninu apẹẹrẹ ti tẹlẹ. A le forukọsilẹ bayi ni ohun-ini ipa ọna agbedemeji. Awọn koodu fun iru kan ìforúkọsílẹ ti wa ni han ni isalẹ.

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 sile

A tun le kọja awọn paramita pẹlu Middleware. 

Fun apẹẹrẹ, ti ohun elo rẹ ba ni awọn ipa oriṣiriṣi bii olumulo, alabojuto, super admin bbl ati pe o fẹ lati jẹrisi iṣe ti o da lori ipa, o le ṣe nipasẹ gbigbe awọn aye-aye pẹlu agbedemeji agbedemeji. 

Middleware ti a ṣẹda ni iṣẹ atẹle, ati pe a le ṣe awọn ariyanjiyan aṣa lẹhin ariyanjiyan naa $tókàn .

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

Bayi jẹ ki a gbiyanju lati ṣeto paramita ipa si agbedemeji agbedemeji tuntun ti a yoo ṣẹda lati ibere, lẹhinna tẹsiwaju lati ṣẹda Ipa Middleware nipa ṣiṣe aṣẹ atẹle

Ṣe atunṣe ọna mimu bi atẹle

<?php

namespace App\Http\Middleware;
use Closure;

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

a fi paramita kun $role, ati inu ọna ila echo lati kọ abajade orukọ ipa naa.

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Bayi jẹ ki a forukọsilẹ RoleMiddleware middleware fun ọna kan pato

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

Bayi lati ṣe idanwo agbedemeji agbedemeji pẹlu paramita, a nilo lati ṣẹda ibeere ati esi kan. Lati ṣe afiwe idahun jẹ ki a ṣẹda oludari ti a yoo pe TestController

php artisan make:controller TestController --plain

aṣẹ ti o kan ṣẹ yoo ṣẹda oludari tuntun inu folda naa app/Http/TestController.php, ki o si yipada ọna index pẹlu ila 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.";
   }
}

Lẹhin ti iṣeto idahun, a kọ ibeere naa nipa ṣiṣatunṣe faili naa routes.phpnipa fifi awọn route role

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

ni aaye yii a le gbiyanju apẹẹrẹ nipa lilo si URL naa http://localhost:8000/role

ati ninu ẹrọ aṣawakiri a yoo rii awọn mejeeji echo

Role editor
Test Controller

Terminable Middleware

Il terminable Middleware ṣe diẹ ninu awọn iṣẹ-ṣiṣe lẹhin ti o ti firanṣẹ esi si ẹrọ aṣawakiri. Eyi le ṣee ṣe nipasẹ ṣiṣẹda agbedemeji agbedemeji pẹlu ọna naa fopin si ni middleware. Il terminable Middleware gbọdọ wa ni aami-pẹlu awọn middleware agbaye. Ọna naa terminate yoo gba awọn ariyanjiyan meji ibere $ e $ idahun. 

Ọna naa Terminate gbọdọ ṣẹda bi o ṣe han ninu koodu atẹle.

php artisan make:middleware TerminateMiddleware

Ni kete ti awọn middleware ti wa ni da app/Http/Middleware/TerminateMiddleware.php jẹ ki ká yipada koodu bi wọnyi

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

ninu apere yi a ni ọna kan handle ati ọna kan terminate pẹlu awọn meji sile $request e $response.

Bayi jẹ ki a forukọsilẹ 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,
    ];

Bayi a nilo lati ṣẹda oludari lati ṣedasilẹ esi

php artisan make:controller XYZController --plain

iyipada awọn akoonu ti awọn kilasi

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

Bayi a nilo lati ṣatunkọ faili naa routes/web.php fifi awọn ipa-ọna ti o nilo lati mu ibeere naa ṣiṣẹ

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

ni aaye yii a le gbiyanju apẹẹrẹ nipa lilo si URL naa http://localhost:8000/terminate

ati ninu ẹrọ aṣawakiri a yoo rii awọn ila wọnyi

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

Ercole Palmeri

O le tun fẹ:

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Ojo iwaju wa Nibi: Bawo ni Ile-iṣẹ Sowo ti n ṣe Iyika Eto-ọrọ Agbaye

Ẹka ọgagun jẹ agbara eto-aje agbaye ni otitọ, eyiti o ti lọ kiri si ọja 150 bilionu kan…

1 May 2024

Awọn olutẹwe ati OpenAI fowo si awọn adehun lati ṣe ilana ṣiṣan ti alaye ti a ṣe ilana nipasẹ Imọran Artificial

Ni ọjọ Aarọ to kọja, Awọn akoko Iṣowo kede adehun kan pẹlu OpenAI. FT ṣe iwe-aṣẹ iwe-akọọlẹ agbaye rẹ…

30 Kẹrin 2024

Awọn sisanwo ori ayelujara: Eyi ni Bii Awọn iṣẹ ṣiṣanwọle jẹ ki o sanwo lailai

Awọn miliọnu eniyan sanwo fun awọn iṣẹ ṣiṣanwọle, san awọn idiyele ṣiṣe alabapin oṣooṣu. O jẹ ero ti o wọpọ pe o…

29 Kẹrin 2024

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…

23 Kẹrin 2024