# Middleware Groups in Laravel

What are Middleware Groups in Laravel?

Middleware Groups in Laravel allow you to bundle multiple [middleware](https://sorane.io/glossary/middleware-in-laravel) together and apply them to a set of routes or controllers. This simplifies the application of commonly used middleware combinations, such as those for web and API routes.

---

## Origin

Middleware Groups were introduced in Laravel to provide a cleaner way to apply multiple middleware to routes, improving readability and reducing redundancy in route definitions.

---

## Why are Middleware Groups Used?

1. **Simplifies Route Definitions**: Reduces clutter by grouping middleware.
2. **Improves Readability**: Route files are easier to understand and maintain.
3. **Centralized Control**: Modify middleware groups to affect all associated routes.

---

## Best Practices

1. **Organize Middleware Logically**: Group middleware by functionality (e.g., authentication, logging).
2. **Leverage Default Groups**: Use Laravel's built-in `web` and `api` groups as starting points.
3. **Avoid Overloading Groups**: Ensure each group is focused and doesn’t include unnecessary middleware.

---

## Example in Action

Define a custom middleware group in `app/Http/Kernel.php`:

```php
protected $middlewareGroups = [
    'admin' => [
        App\Http\Middleware\Authenticate::class,
        App\Http\Middleware\LogAdminActivity::class,
    ],
];
```

Apply the group to routes:

```php
Route::middleware(['admin'])->group(function () {
    Route::get('/dashboard', [AdminController::class, 'index']);
});
```

This ensures all routes in the group share the same middleware stack.

Read this definition in a browser: https://ranetrace.com/glossary/middleware-groups-in-laravel
