Sök…
Introduktion
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);