Verstehen Sie die Grundlagen der Laravel-Middleware

In diesem Artikel werden wir uns eingehend mit dem Laravel-Framework beschäftigen, um das Konzept der Middleware zu verstehen. Die erste Hälfte des Artikels beginnt mit einer Einführung in die Middleware und wozu sie eigentlich verwendet wird.

Im weiteren Verlauf erfahren Sie, wie Sie benutzerdefinierte Middleware in einer Laravel-Anwendung erstellen. Nach der Erstellung Ihrer benutzerdefinierten Middleware untersuchen wir die verfügbaren Optionen, um sie bei Laravel zu registrieren, sodass sie tatsächlich während des Anforderungsverarbeitungsablaufs aufgerufen werden kann.

Ich hoffe, dass Sie sich mit den grundlegenden Laravel-Konzepten und dem Artisan-Befehlszeilentool zur Generierung des Scaffolding-Codes vertraut machen. Natürlich können Sie bei einer funktionierenden Installation der neuesten Laravel-Anwendung die in diesem Artikel aufgeführten Beispiele sofort ausführen.

Was ist Middleware in Laravel??

Wir könnten uns Middleware als einen Mechanismus vorstellen, der es Ihnen ermöglicht, sich in den typischen Prozess der Anforderungsverarbeitung einer Laravel-Anwendung einzuarbeiten. Eine typische Laravel-Routenverarbeitung durchläuft bestimmte Stufen der Anforderungsverarbeitung, und die Middleware ist eine der Schichten, die eine Anwendung durchlaufen muss.

Was genau ist also der Punkt, an dem der Laravel-Request-Verarbeitungsablauf eingehakt wird? Denken Sie an etwas, das in den frühen Stadien des Bootstrappens einer Anwendung ausgeführt werden muss. Zum Beispiel ist es notwendig, Benutzer zu einem frühen Zeitpunkt zu authentifizieren, um zu entscheiden, ob sie auf die aktuelle Route zugreifen dürfen.

Ein paar Dinge, von denen ich denken könnte, dass Sie durch Middleware erreichen könnten, sind:

  • Protokollierung von Anfragen
  • Benutzer umleiten
  • Ändern / Desinfizieren der eingehenden Parameter
  • Manipulieren der von der Laravel-Anwendung generierten Antwort
  • und viele mehr

In der Standardanwendung von Laravel sind bereits einige wichtige Middleware-Teile enthalten. Beispielsweise gibt es eine Middleware, die prüft, ob sich die Site im Wartungsmodus befindet. Auf der anderen Seite gibt es eine Middleware, um die Eingabeaufforderungsparameter zu bereinigen. Wie bereits erwähnt, wird die Benutzerauthentifizierung auch von der Middleware selbst übernommen.

Ich hoffe, dass die bisherige Erklärung Ihnen hilft, sich mit dem Begriff Middleware sicherer zu fühlen. Wenn Sie immer noch verwirrt sind, machen Sie sich keine Sorgen, denn wir werden ab dem nächsten Abschnitt eine benutzerdefinierte Middleware erstellen, die Ihnen hilft zu verstehen, wie Middleware in der realen Welt eingesetzt werden kann.

So erstellen Sie benutzerdefinierte Middleware

In diesem Abschnitt erstellen wir unsere benutzerdefinierte Middleware. Aber was genau wird unsere maßgeschneiderte Middleware leisten??

Vor kurzem bin ich auf eine benutzerdefinierte Anforderung von meinem Client gestoßen, dass Benutzer, die von einem mobilen Gerät aus auf die Website zugreifen, an die entsprechende Sub-Domain-URL umgeleitet werden sollen, wobei alle Parameter der Abfragezeichenfolge intakt sind. Ich glaube, dass dies der perfekte Anwendungsfall ist, um zu zeigen, wie Laravel-Middleware in diesem speziellen Szenario verwendet werden kann.

Der Grund, warum wir in diesem Fall Middleware verwenden möchten, ist die Notwendigkeit, sich in den Anforderungsfluss der Anwendung einzuarbeiten. In unserer benutzerdefinierten Middleware überprüfen wir den Benutzeragenten, und Benutzer werden zur entsprechenden mobilen URL weitergeleitet, wenn sie ein mobiles Gerät verwenden.

Nachdem wir all diese Theorie besprochen haben, wollen wir in die eigentliche Entwicklung einsteigen, und das ist der beste Weg, um ein neues Konzept zu verstehen, nicht wahr?

Als Laravel-Entwickler ist es das Artisan-Tool, mit dem Sie die meiste Zeit zum Erstellen von grundlegendem Vorlagencode verwenden, wenn Sie benutzerdefinierte Funktionen erstellen möchten. Verwenden wir es, um einen grundlegenden Vorlagencode für unsere benutzerdefinierte Middleware zu erstellen.

Gehen Sie zur Befehlszeile und gehen Sie zum Dokumentstamm Ihres Projekts. Führen Sie den folgenden Befehl aus, um die benutzerdefinierte Middleware-Vorlage zu erstellen MobileRedirect.

PHP Handwerker machen: Middleware MobileRedirect

Und das sollte eine Datei erstellen app / http / Middleware / MobileRedirect.php mit dem folgenden Code.

Meistens werden Sie feststellen, dass die Implementierung von Griff Eine Methode, die als Rückgrat der Middleware fungiert, und die primäre Logik der Middleware, die Sie implementieren möchten, sollte hier aufgeführt werden.

Lassen Sie mich diese Gelegenheit nutzen, um die Middleware-Typen von Laravel vorzustellen. Hauptsächlich gibt es zwei Arten - vor Middleware und nach Middleware.

Wie der Name vermuten lässt, läuft die before-Middleware, bevor die Anforderung tatsächlich bearbeitet und die Antwort erstellt wird. Auf der anderen Seite wird die After-Middleware ausgeführt, nachdem die Anforderung von der Anwendung verarbeitet wurde, und die Antwort ist zu diesem Zeitpunkt bereits erstellt.

In unserem Fall müssen wir den Benutzer umleiten, bevor die Anfrage bearbeitet wird. Daher wird diese als Middleware entwickelt.

Fahren Sie fort und ändern Sie die Datei app / http / Middleware / MobileRedirect.php mit folgenden Inhalten.

mobile == "1") return redirect ('mobile-site-url-goes-here');  return $ next ($ request);  

Der Einfachheit halber prüfen wir nur die Existenz der Handy, Mobiltelefon Querystring-Parameter und wenn es auf gesetzt ist WAHR, Der Benutzer wird zur entsprechenden URL der mobilen Website weitergeleitet. Natürlich möchten Sie die Benutzeragenten-Erkennungsbibliothek verwenden, wenn Sie sie in Echtzeit erkennen möchten.

Sie möchten auch das ersetzen mobile-site-url-goes-here Route mit der richtigen Route oder URL, da dies lediglich ein Platzhalter für Demonstrationszwecke ist.

Wir folgen unserer eigenen Logik und rufen dazu auf $ next ($ request) Dadurch kann die Anforderung in der Anwendungskette weiterverarbeitet werden. In unserem Fall ist es wichtig zu wissen, dass wir die mobile Erkennungslogik vor dem $ next ($ request) Call, effektiv machen es vor Middleware.

Und damit ist unsere maßgeschneiderte Middleware fast fertig zum Testen. Im Moment weiß Laravel nichts über unsere Middleware. Um dies zu erreichen, müssen Sie Ihre Middleware bei der Laravel-Anwendung registrieren. Dies ist genau das Thema unseres nächsten Abschnitts.

Bevor wir zum nächsten Abschnitt übergehen, möchte ich Ihnen zeigen, wie die After-Middleware aussieht, nur für den Fall, dass jemand da draußen neugierig ist.

Wie Sie bereits bemerkt haben, wird die benutzerdefinierte Logik der Middleware ausgeführt, nachdem die Anforderung von der Laravel-Anwendung verarbeitet wurde. Zu diesem Zeitpunkt haben Sie Zugriff auf die $ Antwort Objekt auch, so dass Sie bestimmte Aspekte des Objekts manipulieren können, wenn Sie möchten.

Das war also die Geschichte von After Middleware.

Unsere Custom Middleware in Aktion

In diesem Abschnitt wird beschrieben, wie Sie die Middleware bei der Laravel-Anwendung registrieren, damit sie tatsächlich während des Anforderungsverarbeitungsablaufs aufgerufen werden kann.

Fahren Sie fort und öffnen Sie die Datei app / http / kernel.php und suchen Sie nach dem folgenden Ausschnitt.

/ ** * Der globale HTTP-Middleware-Stack der Anwendung. * * Diese Middleware wird bei jeder Anforderung an Ihre Anwendung ausgeführt. * * @var array * / protected $ middleware = [\ Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize :: class, \ App \ Http \ Middleware \ TrimStrings :: Klasse, \ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull :: Klasse,]; 

Wie Sie sehen können, die $ Middleware enthält das Middleware-Array, das mit der Standardinstallation von Laravel geliefert wird. Die hier aufgeführte Middleware wird auf jede Anfrage von Laravel ausgeführt und ist daher ein idealer Kandidat, um unsere eigene Middleware zu platzieren.

Fügen Sie unsere benutzerdefinierte Middleware hinzu, wie im folgenden Snippet gezeigt.

protected $ middleware = [\ Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize :: class, \ App \ Http \ Middleware \ TrimStrings :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull :: class, \ App \ Http \ Middleware \ MobileRedirect :: class,]; 

Versuchen Sie nun, mit dem Querstring auf eine Ihrer Laravel-Routen zuzugreifen mobil = 1, und das sollte unseren Middleware-Code auslösen!

So sollten Sie Ihre Middleware registrieren, die bei jeder Anfrage ausgeführt werden muss. Manchmal möchten Sie jedoch Ihre Middleware nur für bestimmte Routen ausführen. Lassen Sie uns überprüfen, wie Sie dies mit Hilfe der $ routeMiddleware.

Nehmen wir in unserem aktuellen Beispiel an, dass die Benutzer zu einer mobilen Site umgeleitet werden, wenn sie auf eine bestimmte Route auf Ihrer Site zugreifen. In diesem Szenario möchten Sie Ihre Middleware nicht in die $ Middleware Liste.

Stattdessen möchten Sie die Middleware wie unten gezeigt direkt an die Routendefinition anhängen.

Route :: get ('/ hello-world', 'HelloWorldController @ index') -> Middleware (\ App \ Http \ Middleware \ MobileRedirect :: class);

In der Tat könnten wir einen Schritt weiter gehen und einen Alias ​​für unsere Middleware erstellen, damit Sie keine Inline-Klassennamen verwenden müssen.

Öffne die Datei app / http / kernel.php und suche nach dem $ routeMiddleware das hält die Zuordnungen von Alias ​​zu Middleware. Nehmen wir unseren Eintrag in diese Liste auf, wie im folgenden Ausschnitt gezeigt.

protected $ routeMiddleware = ['auth' => \ Illuminate \ Auth \ Middleware \ Authenticate :: class, 'auth.basic' => \ Illuminate \ Auth \ Middleware \ AuthenticateWithBasicAuth :: class, 'bindings' => \ Illuminate \ Routing \ Middleware \ SubstituteBindings :: class, 'kann' => \ Illuminate \ Auth \ Middleware \ Authorize :: class, 'guest' => \ App \ Http \ Middleware \ RedirectIfAuthenticated :: class, 'throttle' => \ Illuminate \ Routing \ Middleware \ ThrottleRequests :: class, 'mobile.redirect' => \ App \ Http \ Middleware \ MobileRedirect :: class]; 

Und die überarbeitete Routendefinition sieht so aus.

Route :: get ('/ hello-world', 'HelloWorldController @ index') -> Middleware ('mobile.redirect');

Und das ist die Geschichte der Registrierung von Middleware mit der Laravel-Anwendung. Das war ziemlich einfach, nicht wahr??

In der Tat sind wir am Ende dieses Artikels angelangt, und ich hoffe, es hat Ihnen sehr gut gefallen.

Fazit

Die Erforschung des architektonischen Konzepts in jedem Framework ist immer aufregend. Dies haben wir in diesem Artikel getan, als wir Middleware im Laravel-Framework erkundeten.

Beginnend mit einer grundlegenden Einführung in die Middleware haben wir uns auf das Thema der Erstellung benutzerdefinierter Middleware in einer Laravel-Anwendung konzentriert. In der zweiten Hälfte des Artikels wurde beschrieben, wie Sie Ihre angepasste Middleware bei Laravel registrieren. Dies war auch die Gelegenheit, die verschiedenen Möglichkeiten zu erkunden, mit denen Sie Ihre Middleware anbringen können.

Hoffentlich war die Reise fruchtbar und der Artikel hat Ihnen geholfen, Ihr Wissen zu bereichern. Wenn Sie möchten, dass ich in den kommenden Artikeln zu bestimmten Themen komme, könnten Sie mir dazu eine kurze Zeile schreiben.

Das wars für heute, und zögern Sie nicht, Ihre Fragen mit dem untenstehenden Feed zu beantworten!