Suche…


Einführung

Middleware sind Klassen, die einer oder mehreren Routen zugeordnet werden können und in der frühen oder letzten Phase des Anforderungszyklus Aktionen ausführen. Wir können sie als eine Reihe von Schichten betrachten, die eine HTTP-Anforderung durchlaufen muss, während sie ausgeführt wird

Bemerkungen

Eine Middleware "Before" wird vor dem Controller-Aktionscode ausgeführt. Eine Middleware wird ausgeführt, nachdem die Anforderung von der Anwendung verarbeitet wurde

Middleware definieren

Um eine neue Middleware zu definieren, müssen Sie die Middleware-Klasse erstellen:

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

Dann müssen wir die Middleware registrieren: Wenn die Middleware an alle Routen der Anwendung app/Http/Kernel.php soll, müssen wir sie der Middleware-Eigenschaft von app/Http/Kernel.php :

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

Wenn Sie die Middleware nur einigen Routen $routeMiddleware möchten, können Sie sie zu $routeMiddleware

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

und binden Sie es dann wie folgt an die einzelnen Routen:

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

Vorher nach After Middleware

Ein Beispiel für "vor" Middleware wäre wie folgt:

<?php

namespace App\Http\Middleware;

use Closure;

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

        return $next($request);
    }
}

Während "nach" Middleware so aussehen würde:

<?php

namespace App\Http\Middleware;

use Closure;

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

        // Perform action

        return $response;
    }
}

Der Hauptunterschied besteht darin, wie der Parameter $request behandelt wird. Wenn vor $next($request) Aktionen ausgeführt werden, die vor dem Ausführen des Controller-Codes ausgeführt werden, während $next($request) zuerst aufgerufen wird, werden die Aktionen nach Ausführung des Controller-Codes ausgeführt.

Routen-Middleware

Jede als routeMiddleware in app/Http/Kernel.php registrierte Middleware kann einer Route zugewiesen werden.

Es gibt verschiedene Möglichkeiten, Middleware zuzuweisen, aber alle tun dasselbe.

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 allen obigen Beispielen können Sie auch vollständig qualifizierte Klassennamen als Middleware übergeben, unabhängig davon, ob sie als Routen-Middleware registriert wurde.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow