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
Downloads
0
Tags
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