Zoeken…


Invoering

Middleware zijn klassen die aan een of meer routes kunnen worden toegewezen en die worden gebruikt om acties uit te voeren in de vroege of laatste fase van de aanvraagcyclus. We kunnen ze beschouwen als een reeks lagen die een HTTP-aanvraag moet doorlopen tijdens de uitvoering

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow