Ricerca…


introduzione

Il middleware è una classe, che può essere assegnata a uno o più percorsi e utilizzata per compiere azioni nelle fasi iniziali o finali del ciclo di richiesta. Possiamo considerarli come una serie di livelli che una richiesta HTTP deve attraversare mentre viene eseguita

Osservazioni

Un middleware "Prima" verrà eseguito prima del codice di azione del controller; mentre un middleware "After" viene eseguito dopo che la richiesta viene gestita dall'applicazione

Definire un middleware

Per definire un nuovo middleware dobbiamo creare la classe middleware:

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

Quindi dobbiamo registrare il middleware: se il middleware deve essere associato a tutti i percorsi dell'applicazione, dovremmo aggiungerlo alla proprietà middleware app/Http/Kernel.php :

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

mentre se vogliamo solo associare il middleware ad alcuni dei percorsi, possiamo aggiungerlo a $routeMiddleware

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

e quindi legarlo alle singole rotte come questa:

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

Prima e dopo il middleware

Un esempio di middleware "prima" sarebbe il seguente:

<?php

namespace App\Http\Middleware;

use Closure;

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

        return $next($request);
    }
}

mentre il middleware "after" apparirebbe così:

<?php

namespace App\Http\Middleware;

use Closure;

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

        // Perform action

        return $response;
    }
}

La differenza chiave sta nel modo in cui viene gestito il parametro $request . Se le azioni vengono eseguite prima che $next($request) avvenga prima che il codice del controller venga eseguito mentre si chiama $next($request) , le azioni vengono eseguite dopo che il codice del controller è stato eseguito.

Installa il middleware

Qualsiasi middleware registrato come routeMiddleware in app/Http/Kernel.php può essere assegnato a un percorso.

Ci sono diversi modi per assegnare il middleware, ma tutti fanno lo stesso.

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

In tutti gli esempi precedenti, è anche possibile passare nomi di classi pienamente qualificati come middleware, indipendentemente dal fatto che sia stato registrato come middleware di route.

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow