Voraussetzung: Du musst ein Laravel Projekt erstellt haben und dich im Projektordner befinden. Um ein Laravel Projekt zu erstellen folge unserem Tutorial oder nutze den Befehl composer create-project laravel/laravel mein-projekt
.
Nachdem Du sichergestellt hast, dass ein Laravel Projekt vorhanden ist, öffnest Du nun das Terminal und navigierst zum besagten Projektordner. Gib dann den folgenden Befehl ein, der eine Middleware mit dem Namen “MyTrackingMiddleware” und eine gleichnamige PHP Datei im Ordern “app/Http/Middleware” erstellt.
Öffne dann die Datei “MyTrackingMiddleware.php” im Verzeichnis “app/Http/Middleware” und bearbeite sie, zum Beispiel mit Visual Studio Code.
<?php namespace App\Http\Middleware; use Closure; class MyTrackingMiddleware { public function handle($request, Closure $next) { // füge hier den Code ein, der vor dem nächsten Middleware-Handler ausgeführt werden soll. // Nützlich um beispielsweise den Request mit Daten anzureichern oder // ihn gar zu verwehren (zB. Auth oder Berechtigungsthemen) return $next($request); } }
Dies ist der Anwendungsfall der am aller häufigsten verwendet wird.
An Stelle des Kommentars fügst du deine eigene Logik hinzu, die vor der nächsten Middleware ausgeführt werden soll. Der $request ist das eingehende Request-Objekt und $next ist der nächste Middleware-Handler.
Du kannst den nächsten Middleware Handler auch in einer Variable “parken” und bevor er final zurückgegeben wird noch einmal verändern.
Hierzu passe deine Middleware wie folgt an:
<?php namespace App\Http\Middleware; use Closure; class MyTrackingMiddleware { public function handle($request, Closure $next) { $response = $next($request); // Hier kommt der Code rein, der nach der nächsten Middleware-Handler ausgeführt wird. // Sinnvoll um den Response vor dem Abschicken noch einmal zu verändern return $response; } }
Und natürlich lässt sich beides auch kombinieren.
<?php namespace App\Http\Middleware; use Closure; class MyTrackingMiddleware { public function handle($request, Closure $next) { // Code, der vor dem nächsten Middleware-Handler ausgeführt wird $response = $next($request); // Code, der nach dem nächsten Middleware-Handler ausgeführt wird return $response; } }
Jetzt haben wir sie zwar erstellt aber noch kommt sie nirgendwo zum Einsatz. Es gibt verschiedene Arten, wie Du nun die Middleware registrieren und nutzen kannst.
Der Aufbau der app/Http/Kernel.php Datei zeigt uns sogar, welche Typen es gibt:
protected $middleware
protected $middlewareGroups
protected $routeMiddleware
Nachfolgend die einzelnen Typen näher beschrieben.
Wir bleiben in der app/Http/Kernel.php und schauen uns das erste Array einmal genauer an. Global in diesem Kontext bedeutet, dass diese Middleware immer ausgeführt wird.
/** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */protected $middleware = [ \App\Http\Middleware\TrustProxies::class, \Fruitcake\Cors\HandleCors::class, \App\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ];
Hier befinden sich nun eine Reihe an registrierten Middlewares. Sie werden der Reihe nach abgearbeitet, beginnend von oben. Sie sind global und gelten für jeden HTTP-Request. Näheres dazu erfährst Du in unserem Laravel Middleware Onlinekurs bzw. im Laravel Powerkurs zum Thema Request-Lifecycle.
Lerne das weltweit beliebteste PHP-Framework, das bei der Entwicklung vieler Webanwendungen eingesetzt wird. Hier zeigen wir dir das Framework Schritt für Schritt mit praktischen Beispielen.
Mehrmandanten Anwendungen stellen für viele Nutzer jeweils eine eigene Umgebung bereit. Wichtig sind dabei Konzepte wie (Sub-)Domain Driven Tenants, etc. Hierfür bietet Laravel ein großartiges Package!
Laravel ist ein beliebtes PHP-Framework, das bei der Entwicklung von Webanwendungen eingesetzt wird. Eine der wichtigsten Phasen in der Webentwicklung ist das Testen der Anwendung, um sicherzustellen, dass sie fehlerfrei und reibungslos funktioniert.
Standardmäßig gibt es zwei Middleware Gruppen, nämlich web und api. Sie unterscheiden sich im Aufruf, zB. Accept: application/json
führt zur API und “normale” Aufrufe werden zur Web Middleware geleitet. API ist Stateless (ohne Sessions) und Web hingegen hat Sessions (zB. für den User Login etc.).
/** * The application's route middleware groups. * * @var array */protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \App\Http\Middleware\LocaleSwitcherMiddleware::class, //... ], 'api' => [ 'throttle:200,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
Hier siehst Du schon, dass diese Middlewares zwar auch immer ausgeführt werden wenn man in der jeweiligen Gruppe ist.
Und hier wird’s dann völlig dynamisch. Denn du vergibst der Middleware einen Namen und das war’s zunächst einmal:
/** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.optional' => \App\Http\Middleware\OptionalAuthenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'deine.middleware' => \App\Http\Middleware\MyTrackingMiddleware::class, //...
In der letzten Array Zeile siehst Du sie, deine neue Middleware mit dem Namen deine.middleware
. Und dann je nachdem wo Du es einsetzen möchtest, weist Du die Middleware der Route bzw. Controller Action zu:
Route::get('/', function () { // ... })->middleware('deine.middleware');
Das kannst Du natürlich auch in einem Controller erledigen, indem Du im Konstruktur die Middleware hinzufügst. Das ist geschmacksache.
class DeinController extends Controller { public function __construct() { $this->middleware(['deine.middleware'])->only(['index', 'show']); } }
Ganz zu schweigen, kannst Du sie auch “nur” (engl. only) für bestimmte Actions zuweisen.
Das ist alles, was du tun musst, um eine Middleware in Laravel zu erstellen. Du kannst jetzt deine eigene Logik hinzufügen und sie in deinem Projekt verwenden.
Und wenn Du noch mehr über Laravel, Middleware & co. erfahren möchtest, schau doch gern mal auf meinen CoderCampus.de!
Lerne das weltweit beliebteste PHP-Framework, das bei der Entwicklung vieler Webanwendungen eingesetzt wird. Hier zeigen wir dir das Framework Schritt für Schritt mit praktischen Beispielen.
Mehrmandanten Anwendungen stellen für viele Nutzer jeweils eine eigene Umgebung bereit. Wichtig sind dabei Konzepte wie (Sub-)Domain Driven Tenants, etc. Hierfür bietet Laravel ein großartiges Package!
Laravel ist ein beliebtes PHP-Framework, das bei der Entwicklung von Webanwendungen eingesetzt wird. Eine der wichtigsten Phasen in der Webentwicklung ist das Testen der Anwendung, um sicherzustellen, dass sie fehlerfrei und reibungslos funktioniert.
Um eine Laravel-Queue zu erstellen, die eine E-Mail verschickt, müssen zunächst einmal alle Anforderungen für…
Dieses Tutorial soll den perfekten und einfachen Einstieg in die Welt des Laravel Frameworks bieten.…
Einfache Konventionen Ich bin ein absoluter Laravel Fan, das vorneweg. Jedoch gibt es so gewisse…
Neue Installation Laravel wirft häufig nach Installationen auf einem neuen System, ob Entwicklungsserver, Lokal oder…
Laravel bietet verschiedene Möglichkeiten an, Beziehungen von Models abzubilden. Übersicht über die drei wichtigsten Beziehungen…
Automatisches Erstellen von Symbolic Links in Laravel Der Beste Weg symbolische Links zu erstellen ist…
This website uses cookies.