Laravel - Middleware: Der Zugang zu der Request-Verarbeitung

Hallo da draußen, zukünftige Laravel-Entwickler! Heute tauchen wir ein in die faszinierende Welt der Laravel Middleware. Stellt euch Middleware als hilfrechten Sicherheitsbeamten für eure Anwendung vor - er überprüft und verarbeitet Anfragen, bevor sie eure Hauptanwendungslogik erreichen. Lassen wir uns gemeinsam auf diese aufregende Reise begeben!

Laravel - Middleware

Was ist Middleware?

Bevor wir uns dem Code widmen, lassen wir uns anschauen, was Middleware ist. Stellt euch vor, ihr veranstaltet eine Party (eure Anwendung) und habt einen Türsteher (Middleware) an der Tür. Dieser Türsteher kann:

  1. Überprüfen, ob die Menschen auf der Gästeliste stehen (Authentifizierung)
  2. Sichern, dass sie angemessen gekleidet sind (Validierung)
  3. Ihnen ein Handgelenkband geben (Informationen zur Anfrage hinzufügen)
  4. Oder sie sogar wegschicken (die Anfrage beenden)

Das ist im Grunde genommen, was Middleware für eure Laravel-Anwendung macht!

Registrierung von Middleware

Nun schauen wir uns an, wie wir unsere eigene Middleware erstellen und registrieren können.

Erstellung von Middleware

Zuerst erstellen wir eine einfache Middleware, die überprüft, ob ein Benutzer über 18 Jahre alt ist:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

In diesem Beispiel überprüft unsere CheckAge Middleware, ob der age Parameter in der Anfrage über 18 ist. Wenn nicht, leitet sie auf die Startseite weiter. Andernfalls leitet sie die Anfrage an die nächste Middleware oder die Hauptanwendung weiter.

Registrierung von Globaler Middleware

Um diese Middleware global (für alle Routen) zu verwenden, müssen wir sie im app/Http/Kernel.php Datei registrieren:

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

Registrierung von Route Middleware

Wenn ihr die Middleware nur für spezifische Routen verwenden möchtet, könnt ihr sie als Route Middleware registrieren:

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

Dann könnt ihr sie in euren Routen so verwenden:

Route::get('adult-only', function () {
//
})->middleware('checkage');

Middleware-Parameter

Manchmal möchten wir, dass unsere Middleware flexibler ist. Das ist, wo Middleware-Parameter nützlich werden!

Lassen wir unsere CheckAge Middleware so修改, dass sie einen Mindestalter-Parameter akzeptiert:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

Jetzt können wir diese Middleware mit unterschiedlichen Altersgrenzen verwenden:

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

Ist das nicht toll? Wir haben unsere Middleware für verschiedene Szenarien wiederverwendbar gemacht!

Terminable Middleware

Manchmal möchten wir, dass unsere Middleware etwas tut, nachdem die Antwort an den Browser gesendet wurde. Das ist, wo terminable Middleware ins Spiel kommt!

Lassen wir eine Middleware erstellen, die die Antwortzeit protokolliert:

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}

Diese Middleware fügt eine start_time zur Anfrage hinzu und protokolliert die Gesamte Antwortzeit nach dem Senden der Antwort.

Um terminable Middleware zu verwenden, stellt sicher, dass sie in eurem app/Http/Kernel.php Datei registriert ist:

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

Middleware-Methoden

Hier ist eine Tabelle der Hauptmethoden, die ihr bei der Arbeit mit Middleware verwenden werdet:

Methode Beschreibung
handle() Die Hauptlogik der Middleware. Verarbeitet die Anfrage und gibt optional an die nächste Middleware weiter.
terminate() Wird nach dem Senden der Antwort an den Browser ausgeführt. Wird für Bereinigungen oder Protokollierung verwendet.

Fazit

Und das war's, Leute! Wir haben die Welt der Laravel Middleware bereist, von der Erstellung und Registrierung von Middleware bis hin zur Verwendung von Parametern und terminable Middleware. Denkt daran, Middleware ist wie das Schweizer Taschenmesser der Anfrageverarbeitung - vielseitig, mächtig und ein unverzichtbares Werkzeug in eurem Laravel-Werkzeugkasten.

Während ihr eure Laravel-Abenteuer fortsetzt, werdet ihr unzählige kreative Möglichkeiten zur Verwendung von Middleware finden. Vielleicht erstellt ihr Middleware, um den Wartungsmodus zu überprüfen, Anfragen zu protokollieren oder sogar Anfordungsdaten zu transformieren. Die Möglichkeiten sind endlos!

Weiter codieren, weiter lernen und vor allem: Spaß haben! Bis zum nächsten Mal, fröhliches Laravel-Programmieren!

Credits: Image by storyset