Tefito

Laravel middleware pehea te mahi

Ko te Laravel middleware he paparanga tono takawaenga e wawao ana i waenga i te tono a te kaiwhakamahi me te whakautu a te tono.

Ko te tikanga ka tukuna e te kaiwhakamahi (Tirohanga Laravel) he tono ki te tūmau (kaiwhakahaere Laravel), ka haere te tono ki roto i te middleware. Ma tenei ka taea e te middleware te tirotiro mena kua whakamotuhēhēhia te tono, kaore ranei: 

  • Mena ka whakamanahia te tono a te kaiwhakamahi, ka tukuna te tono ki te tuara;
  • ki te kore e whakamanahia te tono a te kaiwhakamahi, ka tukuna e te middleware te kaiwhakamahi ki te mata takiuru.

Laravel ka taea e koe defiwhakaoti me te whakamahi i etahi atu taputapu waenga hei mahi i nga momo mahi engari ko te motuhēhēnga. 

Ko nga taputapu waenga Laravel, penei i te motuhēhēnga me te tiaki CSRF, kei roto i te raarangi taupānga/Http/Middleware .

Na reira ka taea e matou te kii ko te middleware he tātari tono http, ma reira ka taea te manatoko i nga tikanga me te mahi i nga mahi.

Te hanga middleware

Hei hanga i tetahi middleware hou ka whakahaerehia e matou te whakahau e whai ake nei:

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

Ka hangaia e matou te middleware a ka kiia e matou CheckAge, artisan ka whakahoki mai ki a matou e whai ake nei:

Ko te matapihi o runga e whakaatu ana kua pai te hanga o te middleware me te ingoa ” TakiAge ".

Ki te kite mehemea kua hangaia te CheckAge middleware, kaore ranei, haere ki te kaupapa i roto i te kōpaki taupānga/Http/Middleware, ka kite koe i te konae i hanga hou

Ko te konae katahi ano ka hangaia te waehere e whai ake nei

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

Whakamahia te taputapu waenga

Hei whakamahi i te middleware, me rehita tatou.

E rua nga momo middleware i Laravel:

  • Middleware globale
  • Route Middleware

Il takawaenga o te ao ka mahia i runga i nga tono HTTP katoa mai i te tono, ko te Huarahi Waenganui ka tohua ki tetahi ara motuhake. Ka taea te rehita Middleware i app/Http/Kernel.php. E rua ngā āhuatanga o tēnei kōnae $waewae e $routeMiddleware . Te taonga $middleware ka whakamahia ki te rehita i te ao waenga me te mana rangatira $routeMiddleware ka whakamahia ki te rehita i nga taputapu takawaenga ara-motuhake.

Hei rehita i te ao waenga, whakarārangihia te akomanga ki te mutunga o te taonga $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,
    ];

Hei rehita i nga taputapu waenga-a-ara, taapirihia te matua me te uara ki te taonga $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,
    ];

I hanga e matou TakiAge i te tauira o mua. Ka taea e tatou te rehita i tenei ki te taonga ara waenga. Ko te waehere mo taua rehitatanga e whakaatuhia ana i raro 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,
    ];

Tawhā Waenganui

Ka taea hoki e tatou te tuku tawhā me te Middleware. 

Hei tauira, mena he rereke nga tuunga o to tono penei i te kaiwhakamahi, te kaiwhakahaere, te super admin etc. a ka hiahia koe ki te whakamotuhēhē i te mahi i runga i te mahi, ka taea e koe ma te whakawhiti i nga tawhā me te middleware. 

Kei roto i te middleware i hanga e matou te mahi e whai ake nei, a ka taea e matou te tuku tohenga ritenga i muri i te tautohe $muri .

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

Inaianei me ngana ki te tautuhi i te tawhā mahi ki tetahi middleware hou ka hangaia e tatou mai i te wahanga, katahi ka haere ki te hanga Role Middleware ma te whakahaere i te whakahau e whai ake nei.

Whakarerekētia te tikanga kakau ka whai ake

<?php

namespace App\Http\Middleware;
use Closure;

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

i tapiritia e matou te tawhā $role, me roto i te tikanga te raina echo ki te tuhi i te putanga te ingoa o te mahi.

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

Inaianei me rehita tatou i te RoleMiddleware middleware mo tetahi ara motuhake

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

Inaianei ki te whakamatautau i te middleware me te tawhā, me hanga he tono me te whakautu. Hei whakataurite i te whakautu me hanga e tatou te kaiwhakahaere ka kiia ko TestController

php artisan make:controller TestController --plain

ko te whakahau ka mahia ka hangaia he kaiwhakahaere hou ki roto i te kōpaki app/Http/TestController.php, ka huri i te tikanga index me te raina 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.";
   }
}

I muri i te whakarite i te whakautu, ka hangaia e matou te tono ma te whakatika i te konae routes.phpmā te tāpiri i te route role

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

i tenei wa ka taea e tatou te whakamatautau i te tauira ma te toro ki te URL http://localhost:8000/role

a i roto i te tirotiro ka kite tatou i nga mea e rua echo

Role editor
Test Controller

Whakamutua Middleware

Il terminable Middleware ka mahi i etahi mahi i muri i te tukunga o te whakautu ki te tirotiro. Ka taea tenei ma te hanga i te middleware me te tikanga mutu i roto i te middleware. Il terminable Middleware me rehita ki te middleware ao. Ko te tikanga terminate ka rua nga tautohetohe $tono e $whakautu. 

Te tikanga Terminate me hanga kia rite ki te whakaatu i te waehere e whai ake nei.

php artisan make:middleware TerminateMiddleware

Kia hangahia te middleware app/Http/Middleware/TerminateMiddleware.php me whakarereke te waehere 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 tenei take he tikanga ta matou handle me tetahi tikanga terminate me nga tawhā e rua $request e $response.

Inaianei me rehita tatou i te 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,
    ];

Inaianei me hanga e matou te kaiwhakahaere hei whakataurite i te whakautu

php artisan make:controller XYZController --plain

te whakarereke i nga korero o te akomanga

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

Inaianei me whakatika i te konae routes/web.php te taapiri i nga huarahi e hiahiatia ana hei whakahohe i te tono

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

i tenei wa ka taea e tatou te whakamatautau i te tauira ma te toro ki te URL http://localhost:8000/terminate

a i roto i te tirotiro ka kite tatou i nga rarangi e whai ake nei

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

Ercole Palmeri

Mahia hoki koe:

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

Nga tuhinga o mua

Ka haina nga Kaiwhakaputa me te OpenAI i nga whakaaetanga hei whakahaere i te rere o nga korero i tukatukahia e Artificial Intelligence

I te Mane kua hipa, i panuitia e te Financial Times tetahi mahi me OpenAI. Ka raihana a FT i tana kairipoata o te ao…

30 Paenga-whāwhā 2024

Utu Ipurangi: Anei te pehea o nga Ratonga Rere e Utu ana koe mo ake tonu atu

E hia miriona nga taangata e utu ana mo nga ratonga rerema, e utu ana i nga utu ohaurunga ia marama. Ko te whakaaro noa ko koe…

29 Paenga-whāwhā 2024

Kei a Veeam te tautoko tino whanui mo te ransomware, mai i te whakamarumaru ki te whakautu me te whakaora

Ka whakarato tonu a Coveware na Veeam i nga ratonga whakautu mai i nga aitua. Ka tukuna e Coveware nga mahi whakawai me te whakatikatika…

23 Paenga-whāwhā 2024

Hurihuri Kakariki me te Mamati: He pehea te Huringa Matapae i te Hurihanga i te Ahumahi Hinu me te Hau

Ko te tiaki matapae kei te huri haere i te waahanga hinu me te hau, me te huarahi auaha me te kaha ki te whakahaere tipu.…

22 Paenga-whāwhā 2024