furkankufrevi / laravel-route-linter
Static analysis for Laravel routes. Detects missing middleware, unused named routes, duplicate URIs, missing controller methods, and more.
Package info
github.com/furkankufrevi/laravel-route-linter
pkg:composer/furkankufrevi/laravel-route-linter
Requires
- php: ^8.1
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/routing: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
This package is auto-updated.
Last update: 2026-05-16 22:04:47 UTC
README
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