Laravel 12 Middleware Group Create and Register

In laravel 12 registering middleware group is little bit different then previous versions. Here in this article we will know how to create middleware group, register that and also use inside our laravel application. For doing this we will below steps.


  1. Create Laravel 12 Empty Project
  2.  Create Two Middlewares
  3. Register Middleware Group 
  4. Create Controller
  5. Create Route for middleware usage

Create Laravel 12 Empty Project

Here we are going to create a new empty laravel 12 . We can create that by below command

composer create-project --prefer-dist laravel/laravel laravel12-middleware 12.*
cd laravel12-middleware

Create Two Middlewares

As we will create middleware group, so that's why we need at least two middlewares. Here we will create two middlewares. You can more and register under one group

php artisan make:middleware CheckLogUserActivityMiddleware
php artisan make:middleware CheckRoleMiddleware
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckLogUserActivityMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        //todo:: change logic according to need
        return $next($request);
    }
}
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckRoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        //todo:: change logic according to need
        return $next($request);
    }
}

Register Middleware Group 

We have created two middleware class. Now will define our middleware group and give a name according to need. You can use your own name. Open your bootstrap/app.php file and change like below

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->group('customGroupMiddleware', [ //change name according to need
            \App\Http\Middleware\CheckRoleMiddleware::class,
            \App\Http\Middleware\CheckLogUserActivityMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

Create Controller

We will create a demo HomeController for accepting index() method. This method will get request from route file

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{

    public function index(Request $request)
    {
        //todo:: do something here
    }

}

Create Route for middleware usage

We have defined a custom middleware group. Now we will use this in our route file. See below code for getting clear idea.

use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route;


Route::get('check-route', [HomeController::class,'index'])->middleware([ 'customGroupMiddleware']);

require __DIR__ . '/auth.php';


Tags: