The Art of Crafting Middleware in Laravel Link to heading

Middleware in Laravel is like the bouncer at a club - it controls who gets in and who stays out. Whether you are adding an extra layer of security or logging requests for debugging, middleware is your go-to solution.

In this blog post, we’ll dive deep into the world of Laravel middleware, exploring how to create custom middleware that can handle requests and responses with finesse. So grab your Laravel passport, and let’s embark on this journey!

What is Middleware? Link to heading

Middleware acts as a bridge between a request and a response. It’s a type of filtering mechanism that can perform various tasks such as authentication, logging, and modifying request data. In Laravel, middleware is easy to implement and incredibly powerful.

Creating Custom Middleware Link to heading

Let’s jump straight into creating our custom middleware. Assume you have a Laravel project set up. If not, you can create one by running:

composer create-project --prefer-dist laravel/laravel middlewareDemo

Navigate to your project directory:

cd middlewareDemo

Now, let’s create a middleware using the Artisan command:

php artisan make:middleware CheckAge

This command will create a new middleware file in the app/Http/Middleware directory. Open the newly created file CheckAge.php:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->input('age') <= 18) {
            return redirect('home');
        }

        return $next($request);
    }
}

In this example, our middleware checks if the user’s age is 18 or less. If so, it redirects them to the home page. Otherwise, it allows the request to proceed.

Registering Middleware Link to heading

To use this middleware, we need to register it in the app/Http/Kernel.php file. Open the file and add the middleware to the $routeMiddleware array:

protected $routeMiddleware = [
    // Other middleware
    'checkAge' => \App\Http\Middleware\CheckAge::class,
];

Applying Middleware to Routes Link to heading

Now that we have registered our middleware, let’s apply it to a route. Open the routes/web.php file and add:

Route::get('profile', function () {
    // Only executed if 'age' > 18
})->middleware('checkAge');

In this route, the CheckAge middleware will be executed before the request is handled. If the user is under 18, they will be redirected to the home page.

Middleware Groups Link to heading

Laravel also allows you to group middleware. This is useful when you want to apply multiple middleware to a set of routes. For example, you can create a group for authenticated users:

Route::middleware(['auth', 'checkAge'])->group(function () {
    Route::get('/dashboard', function () {
        // Only executed if authenticated and 'age' > 18
    });

    Route::get('/settings', function () {
        // Only executed if authenticated and 'age' > 18
    });
});

Conclusion Link to heading

Middleware in Laravel is a versatile tool that allows you to handle requests and responses elegantly. Whether you need to authenticate users, log requests, or add custom filtering, middleware has got you covered.

So the next time you’re building a Laravel application, remember the mighty middleware. It’s not just a bouncer; it’s the unsung hero of your application’s request lifecycle.


References Link to heading

  1. Laravel Official Documentation - Middleware
  2. PHP: Hypertext Preprocessor