Articles

Laravel middleware pehea e hana ai

ʻO Laravel middleware kahi papa noi waena e hoʻopili ana ma waena o ka noi a ka mea hoʻohana a me ka pane o ka noi.

ʻO kēia ke ʻano o ka mea hoʻohana (Laravel view) e noi i ke kikowaena (Laravel controller), e hele ka noi ma waena o ka middleware. Ma kēia ala e hiki ai i ka middleware ke nānā inā hōʻoia ʻia ka noi a ʻaʻole paha: 

  • inā hōʻoia ʻia ka noi a ka mea hoʻohana, hoʻouna ʻia ka noi i ka hope;
  • inā ʻaʻole i hōʻoia ʻia ka noi a ka mea hoʻohana, e hoʻihoʻi ka middleware i ka mea hoʻohana i ka pale komo.

ʻAe ʻo Laravel iā ʻoe e defihoʻopau a hoʻohana i nā middleware hou e hana i nā hana like ʻole koe ka hōʻoia. 

Aia nā Laravel middlewares, e like me ka hōʻoia a me ka pale CSRF, i ka papa kuhikuhi app/Http/Middleware .

No laila hiki iā mākou ke ʻōlelo ʻo ka middleware kahi kānana noi http, kahi e hiki ai ke hōʻoia i nā kūlana a hana i nā hana.

Ke hana nei i ka middleware

No ka hana ʻana i kahi middleware hou mākou e holo nei i kēia kauoha:

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

Hana mākou i ka middleware a kapa aku makou CheckAge, artisan e pane mai iā mākou penei:

Hōʻike ka puka makani ma luna nei ua hana maikaʻi ʻia ka middleware me ka inoa " Makahiki ".

No ka ʻike inā ua hana ʻia ka CheckAge middleware a ʻaʻole paha, e hele i ka papahana ma ka app/Http/Middleware folder, a e ʻike ʻoe i ka faila i hana hou ʻia.

Loaʻa i ka faila i hana hou ʻia kēia code

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

E hoʻohana i ka middleware

No ka hoʻohana ʻana i ka middleware, pono mākou e hoʻopaʻa inoa.

ʻElua ʻano middleware ma Laravel:

  • Middleware globale
  • Route Middleware

Il mea waena honua e hoʻokō ʻia ma kēlā me kēia noi HTTP mai ka noi, ʻoiai ka Alanui Middleware e hāʻawi ʻia i kahi ala kikoʻī. Hiki ke hoʻopaʻa inoa ʻia ʻo Middleware ma app/Http/Kernel.php. Loaʻa i kēia faila nā waiwai ʻelua $waena e $alanuiMiddleware . Ka waiwai $middleware hoʻohana ʻia e hoʻopaʻa inoa i ka middleware honua a me ka ʻona $alanuiMiddleware hoʻohana ʻia e hoʻopaʻa inoa i nā middleware kikoʻī.

No ka hoʻopaʻa inoa ʻana i ka middleware honua, e papa inoa i ka papa ma ka hope o ka waiwai $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,
    ];

No ka hoʻopaʻa inoa ʻana i nā middleware kikoʻī ala, hoʻohui i ke kī a me ka waiwai i ka waiwai $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,
    ];

Ua hana mākou Makahiki i ka laʻana mua. Hiki iā mākou ke hoʻopaʻa inoa i kēia ma ka waiwai ala waena. Hōʻike ʻia ke code no ia inoa inoa ma lalo nei.

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

Nā palena waena

Hiki iā mākou ke hāʻawi i nā ʻāpana me Middleware. 

No ka laʻana, inā he ʻokoʻa nā kuleana o kāu noi e like me ka mea hoʻohana, admin, super admin etc. a makemake ʻoe e hōʻoia i ka hana e pili ana i ke kuleana, hiki iā ʻoe ke hana ma ke kau ʻana i nā palena me ka middleware. 

Aia ka middleware a mākou i hana ai i kēia hana, a hiki iā mākou ke hāʻawi i nā hoʻopaʻapaʻa maʻamau ma hope o ka hoʻopaʻapaʻa $a'e .

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

I kēia manawa, e hoʻāʻo kākou e hoʻonoho i ka ʻāpana hana i kahi middleware hou a mākou e hana ai mai ka ʻōpala, a laila e hoʻomau i ka hana Role Middleware ma ka holo ʻana i kēia kauoha.

E hoʻololi i ke ʻano hana e like me kēia

<?php

namespace App\Http\Middleware;
use Closure;

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

ua hoʻohui mākou i ka ʻāpana $role, a i loko o ke ala ka laina echo e kākau i ka huaʻōlelo i ka inoa o ka hana.

Nupepa hou
Mai poina i ka nūhou nui loa e pili ana i ka hana hou. E kākau inoa e loaʻa iā lākou ma ka leka uila.

I kēia manawa e hoʻopaʻa inoa i ka RoleMiddleware middleware no kahi ala kikoʻī

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

I kēia manawa e ho'āʻo i ka middleware me ka palena, pono mākou e hana i kahi noi a me kahi pane. No ka hoʻohālikelike ʻana i ka pane e hana mākou i ka mea hoʻoponopono e kapa mākou iā TestController

php artisan make:controller TestController --plain

ʻO ke kauoha i hoʻokō ʻia e hana i kahi mana hou i loko o ka waihona app/Http/TestController.php, a hoʻololi i ke ʻano index me ka laina 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.";
   }
}

Ma hope o ka hoʻonohonoho ʻana i ka pane, kūkulu mākou i ka noi ma ka hoʻoponopono ʻana i ka faila routes.phpma ka hoohui ana i ka route role

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

i kēia manawa hiki iā mākou ke hoʻāʻo i ka laʻana ma ke kipa ʻana i ka URL http://localhost:8000/role

a ma ka polokalamu kele e ʻike mākou i nā mea ʻelua echo

Role editor
Test Controller

Hoʻopau Middleware

Il terminable Middleware hana i kekahi mau hana ma hope o ka hoʻouna ʻia ʻana o ka pane i ka polokalamu kele pūnaewele. Hiki ke hoʻokō ʻia kēia ma ka hana ʻana i kahi middleware me ke ʻano hoʻopau i ka middleware. Il terminable Middleware pono e kakau inoa me ka middleware puni honua. ʻO keʻano terminate e loaʻa i nā manaʻo ʻelua $noi e $ pane. 

Ke ʻano hana Terminate pono e hana ʻia e like me ka mea i hōʻike ʻia ma ke code aʻe.

php artisan make:middleware TerminateMiddleware

Ke hana ʻia ka middleware app/Http/Middleware/TerminateMiddleware.php e hoʻololi i ke code penei

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

i kēia hihia he ala mākou handle a me kahi ala terminate me na palena elua $request e $response.

I kēia manawa e hoʻopaʻa inoa i ka 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,
    ];

I kēia manawa pono mākou e hana i ka mea hoʻoponopono e hoʻohālikelike i ka pane

php artisan make:controller XYZController --plain

hoʻololi i nā mea o ka papa

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

I kēia manawa pono mākou e hoʻoponopono i ka faila routes/web.php hoʻohui i nā ala e pono ai e hoʻāla i ka noi

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

i kēia manawa hiki iā mākou ke hoʻāʻo i ka laʻana ma ke kipa ʻana i ka URL http://localhost:8000/terminate

a i loko o ka polokalamu kele e ʻike mākou i nā laina aʻe

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

Ercole Palmeri

Makemake ʻoe e:

Nupepa hou
Mai poina i ka nūhou nui loa e pili ana i ka hana hou. E kākau inoa e loaʻa iā lākou ma ka leka uila.

Nā nūpepa hou

Eia ka wā e hiki mai ana: Pehea e hoʻololi ai ka ʻoihana moku i ka hoʻokele waiwai honua

He mana hoʻokele waiwai maoli ka ʻāpana moana, kahi i hoʻokele i kahi mākeke 150 biliona ...

1 Mei 2024

Hoʻopaʻa inoa nā mea hoʻopuka a me OpenAI i nā ʻaelike e hoʻoponopono i ka kahe o ka ʻike i hana ʻia e Artificial Intelligence

I ka Pōʻakahi i hala, ua hoʻolaha ka Financial Times i kahi kuʻikahi me OpenAI. Laikini ʻo FT i kāna nūpepa papa honua…

30ʻApelila 2024

Uku Online: Eia ke ʻano e uku mau ai nā lawelawe Streaming iā ʻoe

E uku ana nā miliona o ka poʻe no nā lawelawe streaming, e uku ana i nā uku kau inoa o kēlā me kēia mahina. He manaʻo maʻamau ʻoe…

29ʻApelila 2024

Hōʻike ʻo Veeam i ke kākoʻo piha loa no ka ransomware, mai ka pale ʻana i ka pane a me ka hoʻihoʻi

E hoʻomau ʻo Coveware e Veeam i ka hoʻolako ʻana i nā lawelawe pane ʻana i ka hanana cyber extortion. E hāʻawi ʻo Coveware i nā forensics a me nā mana hoʻoponopono…

23ʻApelila 2024