Comprendre les bases du middleware Laravel

Dans cet article, nous allons plonger dans le framework Laravel pour comprendre le concept de middleware. La première moitié de l'article commence par une introduction au middleware et à son utilisation réelle..

À mesure que nous avançons, nous verrons comment créer un middleware personnalisé dans une application Laravel. Après la création de votre middleware personnalisé, nous explorerons les options disponibles pour l'enregistrer auprès de Laravel afin qu'il puisse être réellement appelé pendant le processus de traitement de la demande..

J'espère que vous vous considérez familier avec les concepts de base de Laravel et l'outil de ligne de commande Artisan pour générer le code d'échafaudage. Bien entendu, une installation fonctionnelle de la dernière application Laravel vous permet d'exécuter immédiatement les exemples fournis dans cet article..

Qu'est-ce qu'un middleware à Laravel??

Nous pourrions envisager le middleware comme un mécanisme qui vous permet de vous connecter au flux de traitement de requête typique d'une application Laravel. Un traitement de route Laravel typique passe par certaines étapes du traitement des demandes, et le middleware est l’une des couches par lesquelles une application doit passer..

Alors, quel est exactement le point de raccordement au flux de traitement des demandes Laravel? Pensez à quelque chose qui nécessite une exécution au tout début de l’amorçage d’une application. Par exemple, il est nécessaire d'authentifier les utilisateurs dès le début pour déterminer s'ils sont autorisés à accéder à l'itinéraire actuel..

Voici quelques exemples de choses que vous pourriez réaliser grâce au middleware:

  • enregistrement des demandes
  • rediriger les utilisateurs
  • modifier / désinfecter les paramètres entrants
  • manipuler la réponse générée par l'application Laravel
  • et beaucoup plus

En fait, l’application par défaut de Laravel contient déjà quelques pièces de middleware importantes. Par exemple, un middleware vérifie si le site est en mode maintenance. D'un autre côté, il existe un middleware pour assainir les paramètres de requête d'entrée. Comme je l'ai mentionné précédemment, l'authentification de l'utilisateur est également réalisée par le middleware lui-même..

J'espère que l'explication fournie jusqu'ici vous aide à avoir davantage confiance en l'utilisation du terme "middleware". Si vous êtes toujours perplexe, ne vous inquiétez pas, nous allons créer à partir de la prochaine section un middleware personnalisé qui devrait vous aider à comprendre exactement comment le middleware pourrait être utilisé dans le monde réel..

Comment créer un middleware personnalisé

Dans cette section, nous allons créer notre middleware personnalisé. Mais qu'est-ce que notre middleware personnalisé va accomplir??

Mon client m'a récemment demandé d'exiger que les utilisateurs accédant au site à partir de tout appareil mobile soient redirigés vers l'URL du sous-domaine correspondant avec tous les paramètres de chaîne de requête intacts. Je pense que c'est le cas d'utilisation idéal pour démontrer comment le middleware Laravel pourrait être utilisé dans ce scénario particulier.

La raison pour laquelle nous voudrions utiliser un middleware dans ce cas est la nécessité de s’intégrer au flux de demandes de l’application. Dans notre middleware personnalisé, nous inspectons l'agent utilisateur et les utilisateurs sont redirigés vers l'URL du mobile correspondant s'ils utilisent un appareil mobile..

Après avoir discuté de toute cette théorie, passons au développement actuel et c’est la meilleure façon de comprendre un nouveau concept, n’est-ce pas??

En tant que développeur Laravel, c'est l'outil Artisan que vous utiliserez le plus souvent pour créer du code de modèle de base si vous souhaitez créer une fonctionnalité personnalisée. Utilisons-le pour créer un code de modèle de base pour notre middleware personnalisé.

Rendez-vous sur la ligne de commande et allez à la racine du document de votre projet. Exécutez la commande suivante pour créer le modèle de middleware personnalisé. MobileRedirect.

Fabrication artisanale php: middleware MobileRedirect

Et cela devrait créer un fichier app / Http / Middleware / MobileRedirect.php avec le code suivant.

Le plus souvent, vous remarquerez la mise en œuvre de la manipuler méthode qui agit comme l’épine dorsale du middleware, et la logique principale du middleware que vous souhaitez implémenter devrait aller ici.

Permettez-moi de saisir cette occasion pour vous présenter les types de middleware fournis par Laravel. Principalement, il y a deux types: avant et après le middleware.

Comme son nom l'indique, le middleware avant est quelque chose qui s'exécute avant que la demande ne soit réellement traitée et que la réponse ne soit générée. D'autre part, le middleware après est exécuté une fois que la demande est gérée par l'application et que la réponse est déjà générée à ce stade..

Dans notre cas, nous devons rediriger l'utilisateur avant que la demande ne soit traitée. Elle sera donc développée en tant que middleware avant..

Allez-y et modifiez le fichier app / Http / Middleware / MobileRedirect.php avec le contenu suivant.

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

Par souci de simplicité, nous vérifions simplement l’existence de la mobile paramètre de chaîne de requête, et s'il est défini sur VRAI, l'utilisateur sera redirigé vers l'URL du site mobile correspondante. Bien sûr, vous souhaitez utiliser la bibliothèque de détection d’agent utilisateur si vous souhaitez la détecter en temps réel..

En outre, vous souhaitez remplacer le site-mobile-url-va-ici route avec le bon chemin ou l'URL car il s'agit simplement d'un espace réservé à des fins de démonstration.

Suivant notre logique personnalisée, il y a un appel à $ next ($ request) cela permet à la demande d'être traitée plus loin dans la chaîne d'application. La chose importante à noter dans notre cas est que nous avons placé la logique de détection mobile avant la $ next ($ request) appeler, ce qui en fait un middleware avant.

Et avec cela, notre middleware personnalisé est presque prêt à être testé. Pour le moment, il est impossible que Laravel connaisse notre middleware. Pour ce faire, vous devez enregistrer votre middleware avec l'application Laravel, c'est exactement le sujet de notre section suivante..

Avant de passer à la section suivante, je voudrais montrer à quoi ressemble le middleware après, juste au cas où quelqu'un s’interrogerait sur la question..

Comme vous l'avez déjà remarqué, la logique personnalisée du middleware est exécutée après le traitement de la demande par l'application Laravel. À ce moment, vous avez accès au $ réponse objet aussi, ce qui vous permet de manipuler certains aspects de celui-ci si vous souhaitez.

Voilà donc l'histoire de l'après middleware.

Notre middleware personnalisé en action

Cette section décrit le processus d’enregistrement du middleware avec l’application Laravel afin qu’il puisse effectivement être appelé pendant le processus de traitement de la demande..

Allez-y et ouvrez le fichier app / Http / Kernel.php et recherchez l'extrait suivant.

/ ** * Pile de middleware HTTP global de l'application. * * Ces middlewares sont exécutés à chaque demande adressée à votre application. * * @var array * / protected $ middleware = [\ Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize :: class, \ App \ Http \ Middleware \ TrimStrings :: classe, \ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull :: class,]; 

Comme vous pouvez le voir, le $ middleware contient le tableau de middleware fourni avec l’installation par défaut de Laravel. Le middleware indiqué ici sera exécuté à chaque requête de Laravel. C'est donc le candidat idéal pour placer notre propre middleware personnalisé..

Allez-y et incluez notre middleware personnalisé comme indiqué dans l'extrait suivant.

middleware protégé = [\ 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,]; 

Maintenant, essayez d’accéder à l’un de vos itinéraires Laravel avec la chaîne de requête mobile = 1, et cela devrait déclencher notre code middleware!

Vous devez donc enregistrer votre middleware à exécuter à chaque requête. Cependant, vous souhaitez parfois exécuter votre middleware pour des routes spécifiques uniquement. Voyons comment y parvenir en utilisant le $ routeMiddleware.

Dans le contexte de notre exemple actuel, supposons que les utilisateurs seront redirigés vers un site mobile s'ils accèdent à un itinéraire spécifique de votre site. Dans ce scénario, vous ne souhaitez pas inclure votre middleware dans le $ middleware liste.

Au lieu de cela, vous souhaitez attacher le middleware directement à la définition de route, comme indiqué ci-dessous..

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

En fait, nous pourrions aller plus loin et créer un alias pour notre middleware afin que vous n'ayez pas à utiliser de noms de classe inline.

Ouvrir le fichier app / Http / Kernel.php et chercher le $ routeMiddleware qui contient les mappages d'alias sur les intergiciels. Nous allons inclure notre entrée dans cette liste, comme indiqué dans l'extrait suivant.

protected $ 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 \ Routage \ Middleware \ ThrottleRequests :: class, 'mobile.redirect' => \ App \ Http \ Middleware \ MobileRedirect :: class]; 

Et la définition de route révisée ressemble à ceci.

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

Et c'est l'histoire de l'enregistrement d'un middleware avec l'application Laravel. C'était assez simple, n'est-ce pas?

En fait, nous avons atteint la fin de cet article, et j'espère que vous l'avez vraiment apprécié.

Conclusion

Explorer le concept architectural dans n'importe quel cadre est toujours un sujet passionnant, et c'est ce que nous avons fait dans cet article en explorant le middleware dans le cadre de Laravel..

En commençant par une introduction de base aux middlewares, nous avons concentré notre attention sur la création d'un middleware personnalisé dans une application Laravel. Et c’était la dernière partie de l’article qui expliquait comment enregistrer votre middleware personnalisé auprès de Laravel, et c’était également l’occasion d’explorer les différentes manières d’attacher votre middleware..

J'espère que le voyage a été fructueux et que l'article vous a aidé à enrichir vos connaissances. En outre, si vous souhaitez que je propose des sujets spécifiques dans les prochains articles, vous pouvez toujours me laisser un message à ce sujet..

C'est tout pour aujourd'hui et n'hésitez pas à répondre à vos questions, le cas échéant, en utilisant le flux ci-dessous.!