Ricerca…
introduzione
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);