Begrijp de basisprincipes van Laravel Middleware

In dit artikel duiken we diep in het Laravel-raamwerk om het concept van middleware te begrijpen. De eerste helft van het artikel begint met een inleiding tot middleware en waarvoor deze daadwerkelijk wordt gebruikt.

Naarmate we verder gaan, bespreken we hoe we aangepaste middleware kunnen maken in een Laravel-toepassing. Na het maken van uw aangepaste middleware, zullen we de beschikbare opties onderzoeken om het bij Laravel te registreren, zodat het daadwerkelijk kan worden aangeroepen tijdens de verzoekverwerkingsstroom.

Ik hoop dat je jezelf bekend acht met de basisconcepten van Laravel en de opdrachtregel van Artisan om de steigercode te genereren. Natuurlijk kunt u met een werkende installatie van de nieuwste Laravel-toepassing de voorbeelden in dit artikel meteen uitvoeren.

Wat is middleware in Laravel?

We kunnen middleware beschouwen als een mechanisme waarmee je kunt inhaken op de typische aanvraagverwerkingsstroom van een Laravel-toepassing. Een typische Laravel-routeverwerking gaat door bepaalde stadia van aanvraagverwerking en de middleware is een van die lagen die een toepassing moet passeren.

Dus wat is precies het nut van het inhuren van de Laravel-verwerkingsstroom voor aanvragen? Denk aan iets dat een uitvoering vereist in de vroege stadia van het bootstrappen van een applicatie. Het is bijvoorbeeld nodig om gebruikers in een vroeg stadium te verifiëren om te beslissen of ze toegang hebben tot de huidige route.

Een paar dingen die ik zou kunnen bedenken die je zou kunnen bereiken door middleware zijn:

  • logging van aanvragen
  • gebruikers omleiden
  • wijzigen / zuiveren van de binnenkomende parameters
  • het manipuleren van de respons gegenereerd door de Laravel-applicatie
  • en nog veel meer

In feite brengt de standaard Laravel-applicatie al een paar belangrijke stukjes middleware mee. Er is bijvoorbeeld middleware die controleert of de site zich in de onderhoudsmodus bevindt. Aan de andere kant is er middleware om de parameters voor invoeraanvragen schoon te maken. Zoals ik eerder al zei, wordt de gebruikersauthenticatie ook bereikt door de middleware zelf.

Ik hoop dat de uitleg tot nu toe je helpt om meer vertrouwen te hebben in de term middleware. Maak je geen zorgen als je nog steeds in de war bent, want we gaan vanaf het volgende gedeelte een stukje aangepaste middleware maken die je moet helpen begrijpen hoe middleware in de echte wereld kan worden gebruikt.

Hoe aangepaste middleware te maken

In deze sectie maken we onze aangepaste middleware. Maar wat gaat onze aangepaste middleware precies doen??

Onlangs kwam ik een aangepaste eis van mijn cliënt tegen dat als gebruikers de site benaderen vanaf elk mobiel apparaat, ze zouden moeten worden omgeleid naar de overeenkomstige sub-domein-URL met alle parameters van de querystring intact. Ik geloof dat dit de perfecte use case is om aan te tonen hoe Laravel middleware in dit specifieke scenario zou kunnen worden gebruikt.

De reden waarom we middleware in dit geval zouden willen gebruiken, is de noodzaak om in de aanvraagstroom van de applicatie te haken. In onze aangepaste middleware inspecteren we de user-agent en gebruikers worden omgeleid naar de bijbehorende mobiele URL als ze een mobiel apparaat gebruiken.

Als we al die theorie hebben besproken, laten we dan in de feitelijke ontwikkeling springen, en dat is de beste manier om een ​​nieuw concept te begrijpen, nietwaar?

Als ontwikkelaar van Laravel is het de Artisan-tool die u meestal zult gebruiken om een ​​standaardsjablooncode te maken als u aangepaste functies wilt maken. Laten we dit gebruiken om een ​​standaardsjablooncode te maken voor onze aangepaste middleware.

Ga naar de opdrachtregel en ga naar de documentroot van je project. Voer de volgende opdracht uit om de aangepaste middleware-sjabloon te maken MobileRedirect.

php artisan make: middleware MobileRedirect

En dat zou een bestand moeten maken app / Http / Middleware / MobileRedirect.php met de volgende code.

Vaker wel dan niet, zult u de implementatie van de handvat methode die fungeert als de ruggengraat van de middleware, en de primaire logica van de middleware die je wilt implementeren zou hier moeten gaan.

Laat me deze kans grijpen om de soorten middleware te introduceren die Laravel biedt. Hoofdzakelijk zijn dit twee typen vóór middleware en na middleware.

Zoals de naam al doet vermoeden, is de eerdere middleware iets dat wordt uitgevoerd voordat het verzoek daadwerkelijk wordt afgehandeld en het antwoord wordt opgebouwd. Anderzijds wordt de na-middleware uitgevoerd nadat het verzoek door de toepassing is verwerkt en het antwoord op dit moment al is gemaakt.

In ons geval moeten we de gebruiker omleiden voordat het verzoek wordt afgehandeld en daarom zal het worden ontwikkeld als een voor middleware.

Ga je gang en wijzig het bestand app / Http / Middleware / MobileRedirect.php met de volgende inhoud.

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

Voor de eenvoud controleren we alleen het bestaan ​​van de mobiel parameter querystring en als deze is ingesteld op TRUE, de gebruiker wordt omgeleid naar de bijbehorende URL van de mobiele site. Natuurlijk wilt u de detectielibrary voor gebruikersagenten gebruiken als u deze in realtime wilt detecteren.

Ook zou u de. Willen vervangen mobile-website-url-goes-hier route met de juiste route of URL, want het is slechts een tijdelijke aanduiding voor demonstratiedoeleinden.

Volgens onze aangepaste logica is er een oproep voor $ Next ($ aanvraag) waarmee het verzoek verder kan worden verwerkt in de applicatieketen. Het belangrijkste om op te merken in ons geval is dat we de mobiele detectielogica voorafgaand aan de $ Next ($ aanvraag) call, waardoor het een voor middleware wordt.

En daarmee is onze aangepaste middleware bijna klaar om te worden getest. Op dit moment is Laravel op geen enkele manier bekend met onze middleware. Om dit mogelijk te maken, moet je je middleware registreren bij de Laravel-applicatie, en dat is precies het onderwerp van onze volgende sectie.

Voordat ik naar de volgende sectie ga, wil ik laten zien hoe de after middleware er uitziet, voor het geval iemand daar nieuwsgierig naar is.

Zoals je al had gemerkt, wordt de aangepaste logica van de middleware uitgevoerd nadat het verzoek door de Laravel-toepassing is verwerkt. Op dit moment hebt u toegang tot de $ response object ook, waarmee je bepaalde aspecten ervan kunt manipuleren als je dat wilt.

Dus dat was het verhaal van na middleware.

Onze aangepaste middleware in actie

In dit gedeelte wordt het proces beschreven van het registreren van de middleware met de Laravel-toepassing, zodat deze daadwerkelijk kan worden aangeroepen tijdens de aanvraagverwerkingsstroom.

Ga je gang en open het bestand app / Http / Kernel.php en zoek naar het volgende fragment.

/ ** * De algemene HTTP-middleware-stack van de toepassing. * * Deze middleware worden tijdens elk verzoek naar uw toepassing uitgevoerd. * * @var array * / 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,]; 

Zoals u kunt zien, de $ middleware bevat de reeks middleware die wordt meegeleverd met de standaardinstallatie van Laravel. De middleware die hier wordt vermeld, wordt op elk Laravel-verzoek uitgevoerd en is dus een ideale kandidaat om onze eigen aangepaste middleware te plaatsen.

Ga je gang en neem onze aangepaste middleware op, zoals in het volgende fragment wordt getoond.

beschermde $ 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,]; 

Probeer nu toegang te krijgen tot uw Laravel-routes met de querystring mobiele = 1, en dat zou onze middleware code moeten activeren!

Dus dat is hoe je je middleware zou moeten registreren die bij elke aanvraag moet worden uitgevoerd. Soms wilt u uw middleware alleen voor de specifieke routes uitvoeren. Laten we kijken hoe we dat kunnen bereiken door de $ routeMiddleware.

Laten we in de context van ons huidige voorbeeld aannemen dat de gebruikers worden omgeleid naar een mobiele site als ze toegang hebben tot een specifieke route op uw site. In dit scenario wilt u uw middleware niet opnemen in de $ middleware lijst.

In plaats daarvan wilt u de middleware rechtstreeks aan de routedefinitie koppelen, zoals hieronder wordt weergegeven.

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

We kunnen zelfs een stap verder gaan en een alias maken voor onze middleware, zodat u geen inline class-namen hoeft te gebruiken.

Open het bestand app / Http / Kernel.php en zoek naar de $ routeMiddleware die de toewijzingen van aliassen aan middleware bevat. Laten we onze vermelding in die lijst opnemen, zoals getoond in het volgende fragment.

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

En de herziene routedefinitie ziet er zo uit.

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

En dat is het verhaal van het registreren van middleware met de Laravel-applicatie. Dat was vrij eenvoudig, nietwaar?

We hebben zelfs het einde van dit artikel bereikt en ik hoop dat je er erg van hebt genoten.

Conclusie

Het verkennen van het architecturale concept in elk kader is altijd spannend, en dat is wat we in dit artikel hebben gedaan toen we middleware in het Laravel-framework verkenden.

Beginnend met een basisinleiding tot middleware, verlegden we onze aandacht naar het onderwerp van het maken van aangepaste middleware in een Laravel-toepassing. En het was de tweede helft van het artikel waarin werd besproken hoe u uw aangepaste middleware bij Laravel registreerde, en dat was ook de gelegenheid om de verschillende manieren te verkennen waarop u uw middleware kon bevestigen.

Hopelijk was de reis vruchtbaar en heeft het artikel je geholpen om je kennis te verrijken. En als je wilt dat ik met specifieke onderwerpen in de aankomende artikelen kom, kun je me daar altijd een bericht over geven.

Dat is het voor vandaag en aarzel niet om uw vragen, indien van toepassing, te schieten met behulp van de onderstaande feed!