Suche…
Einführung
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);