Zoeken…
Invoering
Opmerkingen
Een "Before" middleware wordt uitgevoerd vóór de actiecode van de controller; terwijl een "After" middleware wordt uitgevoerd nadat het verzoek door de toepassing is afgehandeld
Middleware definiëren
Om een nieuwe middleware te definiëren, moeten we de middleware-klasse maken:
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);
}
}
Vervolgens moeten we de middleware registreren: als de middleware bindend moet zijn voor alle routes van de toepassing, moeten we deze toevoegen aan de middleware-eigenschap van app/Http/Kernel.php
:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\AuthenticationMiddleware::class
];
terwijl als we alleen de middleware willen koppelen aan enkele van de routes, we het kunnen toevoegen aan $routeMiddleware
//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];
en bind het vervolgens aan de afzonderlijke routes zoals deze:
//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');
Voor versus na middleware
Een voorbeeld van "voor" middleware zou als volgt zijn:
<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
terwijl "after" middleware er als volgt zou uitzien:
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
Het belangrijkste verschil zit in de manier waarop de parameter $request
wordt verwerkt. Als acties worden uitgevoerd vóór $next($request)
, gebeurt dit voordat de controllercode wordt uitgevoerd, terwijl eerst $next($request)
wordt aangeroepen, waarna de acties worden uitgevoerd nadat de controllercode is uitgevoerd.
Routemiddleware
Elke middleware die als routeMiddleware
in app/Http/Kernel.php
is app/Http/Kernel.php
kan aan een route worden toegewezen.
Er zijn een paar verschillende manieren om middleware toe te wijzen, maar ze doen allemaal hetzelfde.
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 alle bovenstaande voorbeelden kunt u ook volledig gekwalificeerde klassennamen doorgeven als middleware, ongeacht of het is geregistreerd als routemiddleware.
use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);