Laravel接口控制器默认应放在app/Http/Controllers/目录下,需严格匹配PSR-4命名空间;推荐按Api子目录或版本化子命名空间(如Api\V1)组织,文件名须以Controller结尾且类继承App\Http\Controllers\Controller。

Laravel 接口控制器默认应放在 app/Http/Controllers/ 目录下。
这是 Laravel 的标准约定,框架通过 PSR-4 自动加载机制识别该路径下的类。只要命名空间与目录结构严格匹配,就能被正确解析。
如果项目需要区分接口(API)和网页(Web)逻辑,推荐按以下方式组织:
基础 API 控制器:直接放在
app/Http/Controllers/,例如app/Http/Controllers/Api/UserController.php
对应命名空间:App\Http\Controllers\Api-
多版本 API:用子命名空间 + 路由前缀隔离
例如:Route::prefix('v1')->namespace('App\Http\Controllers\Api\V1')->group(function () { Route::get('/users', [UserController::class, 'index']); });此时控制器路径为
app/Http/Controllers/Api/V1/UserController.php,命名空间必须为App\Http\Controllers\Api\V1 -
统一 API 模块入口:可新建
app/Http/Controllers/Api/目录,但务必同步更新命名空间,不能只改路径不改namespace
注意两点关键约束:
- 文件名必须以
Controller结尾(如PostController.php),类名保持大驼峰格式 - 控制器类建议继承
App\Http\Controllers\Controller,否则将无法使用validate()、middleware()、authorize()等常用方法
生成命令也遵循此规则:
php artisan make:controller Api/PostController --api # 生成路径:app/Http/Controllers/Api/PostController.php # 命名空间自动设为 App\Http\Controllers\Api
不按约定存放(比如放到了 app/Controllers/ 或 app/Api/),即使手动 use 也会在路由解析时触发 Class not found 错误。











