Sök…


Introduktion

Middleware är klasser som kan tilldelas en eller flera rutter och används för att göra åtgärder i de tidiga eller sista faserna av förfrågningscykeln. Vi kan tänka på dem som en serie lager som en HTTP-begäran måste gå igenom medan den körs

Anmärkningar

En "Före" mellanprogram kommer att köras innan kontrollerens åtgärdskod; medan en "After" -programvara körs efter att begäran hanterats av applikationen

Definiera en Middleware

För att definiera en ny mellanprogram måste vi skapa medelvaruklassen:

class AuthenticationMiddleware
{
    //this method will execute when the middleware will be triggered
    public function handle ( $request, Closure $next )
    {
        if ( ! Auth::user() )
        {
            return redirect('login');
        }

        return $next($request);
    }
}

Då måste vi registrera mellanprogrammet: om mellanprogrammet ska vara bundet till alla vägar för applikationen, bör vi lägga till det till mellanvarusegenskapen i app/Http/Kernel.php :

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\AuthenticationMiddleware::class
];

medan vi bara vill koppla mellanprogrammet till några av rutterna kan vi lägga till det till $routeMiddleware

//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
    'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];

och sedan binda den till de enskilda vägarna så här:

//bind the middleware to the admin_page route, so that it will be executed for that route
Route::get('admin_page', 'AdminController@index')->middleware('custom_auth');

Före vs. After Middleware

Ett exempel på "före" mellanprogram skulle vara följande:

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

medan "efter" mellanprogram skulle se ut så här:

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

Den viktigaste skillnaden är i hur $request parametern hanteras. Om åtgärder utförs före $next($request) som kommer att hända innan styrenhetskoden körs medan samtalen $next($request) först kommer att leda till att åtgärderna utförs efter att styrenhetskoden har utförts.

Route Middleware

Allt mellanprogram registrerat som routeMiddleware i app/Http/Kernel.php kan tilldelas en rutt.

Det finns några olika sätt att tilldela mellanprogram, men alla gör samma sak.

Route::get('/admin', 'AdminController@index')->middleware('auth', 'admin');
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => 'auth']);
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => ['auth', 'admin']);

I alla exemplen ovan kan du också lämna fullständigt kvalificerade klassnamn som mellanprogram, oavsett om det har registrerats som en ruttmedelsvara.

use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow