Laravel middleware in depth

Jacques MBABAZI
3 min readOct 3, 2023

--

Laravel middleware is a fundamental concept in the Laravel PHP framework that allows you to filter and process HTTP requests entering your application. Middleware acts as a bridge between the client’s request and the application’s response, allowing you to perform various tasks such as authentication, authorization, logging, and input validation.

Consider supporting me by buying me a coffee or subscribe to my buy me a coffee subscription.

Here, I’ll provide an in-depth explanation of Laravel middleware:

1. Middleware Basics

Middleware is essentially a series of HTTP request filters. Each middleware class can perform specific tasks before the request reaches the application’s core logic. You can think of middleware as a series of “layers” that the request passes through.

2. Middleware Registration

Middleware is registered in the app/Http/Kernel.php file within the $middleware property and the $middlewareGroups property. The $middleware property contains middleware that runs on every request, while the $middlewareGroups property allows you to define groups of middleware that can be applied to specific routes or route groups.

3. Creating Custom Middleware

You can create custom middleware using Laravel’s artisan command-line tool:

Creating custom middleware

This command generates a new middleware class in the app/Http/Middleware directory. You can then define your custom logic in the handle method of the middleware class.

4. Middleware Execution Order

Middleware is executed in the order in which it’s listed in the $middleware and $middlewareGroups properties. Requests pass through each middleware class one by one. You can control the order by rearranging middleware classes in the configuration file.

5. Middleware Parameters

Middleware can accept parameters that you can pass when applying middleware to routes or route groups. To define parameters, you can add them to the middleware constructor. For example:

6. Conditional Middleware

You can conditionally apply middleware to routes or route groups using Laravel’s route definition methods. For example, you can use the middleware method to apply middleware based on a specific condition:

7. Terminable Middleware

Some middleware may need to perform additional actions after the response has been sent to the client. You can define terminable middleware by implementing the TerminableMiddleware interface and defining the terminate method.

8. Middleware Groups

Middleware groups allow you to apply a set of middleware to multiple routes or route groups with a single declaration. For example, Laravel includes a predefined web middleware group for typical web application middleware.

9. Global Middleware

Global middleware is executed on every HTTP request to your application. These are defined in the $middleware property of the Kernel.php file. Use global middleware sparingly, as they can affect the performance of your application.

10. Route Middleware

Route middleware is applied to specific routes or route groups. You can specify route middleware in your route definitions or controller constructors.

11. Terminology

  • Request: The incoming HTTP request from the client.
  • Response: The HTTP response returned to the client.
  • Next Closure: A closure that represents the next middleware or the final application logic. You call this closure to pass the request to the next middleware in the stack.

In summary, Laravel middleware is a powerful feature that allows you to handle various aspects of HTTP requests in a modular and organized way. It enables you to keep your application’s logic clean and separated, making it easier to maintain and extend. You can use middleware for tasks like authentication, authorization, request modification, and more, making it a crucial component of Laravel’s request handling process.

Again support my work buy by buying me a coffee or subscribe to my buy me a coffee subscription.

Happy Coding!

--

--

Jacques MBABAZI

Content creator about Laravel and it's ecosystem, Laravel developer with four years of experience. Support me here https://www.buymeacoffee.com/loficoders