Szukaj…


Wprowadzenie

Oprogramowanie pośrednie to klasy, które można przypisać do jednej lub więcej tras i służą do wykonywania działań we wczesnej lub końcowej fazie cyklu żądania. Możemy myśleć o nich jako o szeregu warstw, przez które musi przejść żądanie HTTP podczas jego wykonywania

Uwagi

Oprogramowanie pośrednie „Before” zostanie uruchomione przed kodem akcji kontrolera; podczas gdy oprogramowanie pośredniczące „Po” jest wykonywane po przetworzeniu żądania przez aplikację

Definiowanie oprogramowania pośredniego

Aby zdefiniować nowe oprogramowanie pośrednie, musimy utworzyć klasę oprogramowania pośredniego:

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

Następnie musimy zarejestrować oprogramowanie pośrednie: jeśli oprogramowanie pośrednie powinno być powiązane ze wszystkimi trasami aplikacji, powinniśmy dodać go do właściwości oprogramowania pośredniego app/Http/Kernel.php :

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

chociaż jeśli chcemy powiązać oprogramowanie pośrednie tylko z niektórymi trasami, możemy dodać je do $routeMiddleware

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

a następnie powiąż go z pojedynczymi trasami w następujący sposób:

//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');

Przed a po Middleware

Przykładem oprogramowania pośredniego „przed” byłoby:

<?php

namespace App\Http\Middleware;

use Closure;

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

        return $next($request);
    }
}

podczas gdy oprogramowanie pośrednie „po” wyglądałoby tak:

<?php

namespace App\Http\Middleware;

use Closure;

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

        // Perform action

        return $response;
    }
}

Kluczowa różnica polega na tym, jak obsługiwany jest parametr $request . Jeśli akcje zostaną wykonane przed $next($request) , co wydarzy się przed wykonaniem kodu kontrolera, a wywołanie najpierw $next($request) spowoduje, że akcje zostaną wykonane po wykonaniu kodu kontrolera.

Route Middleware

Każde oprogramowanie pośrednie zarejestrowane jako routeMiddleware w app/Http/Kernel.php może być przypisane do trasy.

Istnieje kilka różnych sposobów przypisywania oprogramowania pośredniego, ale wszystkie robią to samo.

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']);

We wszystkich powyższych przykładach można również przekazywać w pełni kwalifikowane nazwy klas jako oprogramowanie pośrednie, niezależnie od tego, czy zostało zarejestrowane jako oprogramowanie pośrednie trasy.

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow