php artisan route:list 是 Laravel 自带命令,用于列出所有已注册路由,默认显示方法、URI、名称和中间件四列,支持 --json、--name、--method 等参数筛选,但需确保 Laravel ≥5.1、路由正确注册且无加载异常。

php artisan route:list 能直接列出所有路由
这是 Laravel 自带的命令,不需要额外安装插件或改配置。执行后会显示 GET、POST 等方法,对应 URI、Name、Middlewares 四列,默认按字母顺序排,不区分是否已缓存。
常见错误现象:Command "route:list" is not defined —— 通常是 Laravel 版本低于 5.1,或者项目没跑完 composer install 导致 Artisan 命令未加载完整。
- 确保在项目根目录下执行,不是
vendor/或app/子目录 - 如果提示内存不足,加
--no-ansi减少输出开销 - Laravel 9+ 默认隐藏中间件细节,加
--verbose才显示完整中间件栈
route:list 输出为空或漏路由?检查 RouteServiceProvider 和缓存
空列表多数不是命令问题,而是路由没被正确注册。Laravel 的 RouteServiceProvider 会根据环境决定是否加载 routes/web.php 或 routes/api.php,而 php artisan route:clear 只清缓存,不解决注册逻辑缺陷。
使用场景:本地开发时新增了路由但 route:list 不出现;线上部署后部分路由“消失”。
- 确认
app/Providers/RouteServiceProvider.php中boot()方法调用了$this->routes(...) - 运行
php artisan config:clear再试 —— 有时配置缓存干扰路由发现 - 若用
Route::middleware(...)->group(...)套了多层,检查中间件本身是否抛出异常导致后续路由跳过加载
想导出为 JSON 或过滤特定路由?用 --json 和 --name 参数
route:list 支持结构化输出和精准筛选,比手动 grep 更可靠,尤其在 CI/CD 或调试大型项目时有用。
参数差异:--json 输出标准 JSON,字段名全小写(如 method、uri);--name 匹配的是路由名(as('xxx') 定义的),不是控制器方法名。
- 查所有含
admin的路由:php artisan route:list --name=admin - 导出全部供脚本解析:
php artisan route:list --json > routes.json -
--method=POST只显示 POST 路由,但注意它不识别Route::match(['POST','PUT'], ...)这类写法,会漏掉
生产环境禁用 route:list?别依赖它做权限校验
这个命令本质是读取已注册的 RouteCollection,不触发任何中间件或门面逻辑。有人误以为能用来动态判断“某用户能否访问某路由”,这是错的 —— 路由存在 ≠ 用户有权限,也不代表该路由当前可访问(比如中间件返回 403 或重定向)。
性能影响:执行一次 route:list 会完整加载所有服务提供者和路由文件,生产环境首次运行可能卡顿 1–2 秒,尤其是启用了大量包的项目。
- 不要在控制器里调用
Artisan::call('route:list')实时查路由 —— 开销大且无必要 - 真要运行时判断路由是否存在,用
Route::has('xxx')或Route::getRoutes()->getByName('xxx') - 线上服务器应禁用 Artisan 命令的 Web 访问入口,避免暴露路由结构给攻击者
真正麻烦的是带闭包路由、条件加载(如 if (app()->environment('local')))、或通过第三方包动态注册的路由 —— 它们不会稳定出现在每次 route:list 输出里,得翻源码或打日志确认实际加载时机。











