Looking to hire Laravel developers? Try LaraJobs

laravel-route-linter maintained by furkankufrevi

Description
Static analysis for Laravel routes. Detects missing middleware, unused named routes, duplicate URIs, missing controller methods, and more.
Last update
2026/03/16 22:39 (dev-main)
License
Links
Downloads
0

Comments
comments powered by Disqus

Laravel Route Linter

Static analysis for your Laravel routes. Detects missing controller methods, duplicate URIs, duplicate names, missing middleware, and unnamed routes.

Installation

composer require furkankufrevi/laravel-route-linter --dev

The service provider is auto-discovered. To publish the config:

php artisan vendor:publish --tag=route-linter-config

Usage

php artisan route:lint

Run a specific analyzer only:

php artisan route:lint --analyzer=duplicate_uris

Example Output

Analyzing 42 route(s)...

  ERROR  Method 'destroy' not found in App\Http\Controllers\UserController.
         DELETE|HEAD api/users/{user}
  WARN   Duplicate route URI registered (first seen pointing to App\Http\Controllers\PostController@index).
         GET|HEAD api/posts
  WARN   Route matches 'api/*' but is missing required middleware 'auth:sanctum'.
         GET|HEAD api/public/feed
  INFO   Route has no name. Consider adding ->name() for URL generation.
         POST|HEAD api/webhooks/stripe

  Found 1 error(s), 2 warning(s), 1 info(s).

Analyzers

Analyzer Level What it detects
missing_controller_methods Error Controller class or method doesn't exist
duplicate_uris Warning Same HTTP method + URI registered more than once
duplicate_names Error Multiple routes sharing the same name
missing_middleware Warning Routes matching a pattern but missing required middleware
unnamed_routes Info Controller routes without a ->name()

Configuration

// config/route-linter.php

return [
    // Enable/disable individual analyzers
    'analyzers' => [
        'missing_controller_methods' => true,
        'duplicate_uris'             => true,
        'duplicate_names'            => true,
        'missing_middleware'         => true,
        'unnamed_routes'             => true,
    ],

    // Enforce middleware on route patterns
    'required_middleware' => [
        'api/*'   => ['auth:sanctum'],
        'admin/*' => ['auth', 'admin'],
    ],

    // Exclude routes from linting
    'exclude' => [
        '_ignition/*',
        'sanctum/*',
        'telescope/*',
        'horizon/*',
    ],
];

CI Integration

Add to your CI pipeline to catch route issues before deployment:

- run: php artisan route:lint

The command exits with code 1 if any errors are found, making it CI-friendly.

License

MIT