Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Middleware Patterns
rhino-project/rhino-laravel
cursor
middleware
model-middleware
request-validation
response-headers
logging
policies
scopes

Middleware conventions for the laravel-global-controller package

Install
php artisan boost:add-skill rhino-project/rhino-laravel

Save this content to: .cursor/rules/middleware-patterns.mdc

# Middleware Patterns

## Purpose

Middleware handles cross-cutting concerns: logging, rate limiting, response headers, request validation, feature flags, caching headers, etc.

## Assigning to Models

Assign middleware via model properties, NOT in controllers:

```php
// All CRUD actions
public static array $middleware = [
    \App\Http\Middleware\LogAccess::class,
];

// Specific actions only
public static array $middlewareActions = [
    'store'  => [\App\Http\Middleware\ValidatePayload::class],
    'show'   => [\App\Http\Middleware\AddCacheHeaders::class],
];
```

Available action names: `index`, `store`, `show`, `update`, `destroy`.

## Structure

```php
class LogAccess
{
    public function handle(Request $request, Closure $next): Response
    {
        // Pre-processing (before controller)
        Log::info('Accessing: ' . $request->path());

        $response = $next($request);

        // Post-processing (after controller)
        $response->headers->set('X-Logged', 'true');

        return $response;
    }
}
```

## DON'Ts

- Don't put authorization logic in middleware — use Policies
- Don't put data filtering in middleware — use Scopes
- Don't register middleware in controller constructors — use model `$middleware` / `$middlewareActions`
- Don't combine multiple concerns in one middleware — keep each focused on one task

Middleware Patterns

Purpose

Middleware handles cross-cutting concerns: logging, rate limiting, response headers, request validation, feature flags, caching headers, etc.

Assigning to Models

Assign middleware via model properties, NOT in controllers:

// All CRUD actions
public static array $middleware = [
    \App\Http\Middleware\LogAccess::class,
];

// Specific actions only
public static array $middlewareActions = [
    'store'  => [\App\Http\Middleware\ValidatePayload::class],
    'show'   => [\App\Http\Middleware\AddCacheHeaders::class],
];

Available action names: index, store, show, update, destroy.

Structure

class LogAccess
{
    public function handle(Request $request, Closure $next): Response
    {
        // Pre-processing (before controller)
        Log::info('Accessing: ' . $request->path());

        $response = $next($request);

        // Post-processing (after controller)
        $response->headers->set('X-Logged', 'true');

        return $response;
    }
}

DON'Ts

  • Don't put authorization logic in middleware — use Policies
  • Don't put data filtering in middleware — use Scopes
  • Don't register middleware in controller constructors — use model $middleware / $middlewareActions
  • Don't combine multiple concerns in one middleware — keep each focused on one task
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route