Laravel标准目录结构包含八大部分:app存放核心逻辑,bootstrap负责启动引导,config集中管理配置,database处理迁移与填充,resources存放前端资源与视图,routes定义请求路由,public为Web服务器唯一入口,tests组织自动化测试。

在 Laravel 项目中,标准目录结构是框架稳定运行和团队协作的基础。若对各目录与核心文件的作用缺乏清晰认知,可能导致配置错误、路由失效或环境变量加载异常等问题。以下是 Laravel 默认项目结构中关键目录与重要文件的逐层说明:
一、app 目录:应用核心逻辑存放区
该目录承载业务逻辑主体,所有自定义类(如控制器、模型、服务提供者)默认位于此。Laravel 自动通过 Composer 的 PSR-4 自动加载机制注册其中命名空间。
1、App\Http\Controllers 存放所有 HTTP 请求处理控制器,每个控制器类继承 Controller 基类并响应特定路由。
2、App\Models 包含 Eloquent 模型类,负责数据库表映射与数据操作,每个模型默认对应一张数据表。
3、App\Providers 收纳服务提供者,用于绑定接口与实现、注册事件监听器、扩展容器功能等启动期操作。
二、bootstrap 目录:框架启动引导入口
该目录包含 Laravel 应用初始化所依赖的底层引导文件,决定框架如何加载配置、服务容器及自动加载规则。
1、bootstrap/app.php 是整个应用的“心脏”,在此创建 Illuminate\Foundation\Application 实例,并注册核心服务提供者与中间件。
2、bootstrap/autoload.php 引入 Composer 自动加载器,确保所有命名空间类可被即时解析,无须手动 require。
三、config 目录:全局配置项集中管理区
所有可被 config() 辅助函数读取的 PHP 配置数组均存放于此,支持多环境覆盖(如 .env 文件值优先注入)。
1、config/app.php 定义应用基础参数,包括名称、调试模式、时区、密钥、别名(aliases)与服务提供者列表。
2、config/database.php 描述数据库连接配置,支持 MySQL、PostgreSQL、SQLite 等多种驱动,并允许为每种连接定义读写分离设置。
3、config/filesystems.php 管理本地、S3、FTP 等存储驱动的磁盘配置,Storage::disk('s3') 即由此驱动解析。
四、database 目录:数据迁移与种子操作中心
该目录组织数据库变更脚本与测试数据生成逻辑,保障多人协作下数据库结构一致性与初始数据可复现性。
1、database/migrations 存放时间戳命名的迁移类,每个类含 up()(执行变更)与 down()(回滚操作)方法。
2、database/seeders 包含数据库填充器,如 DatabaseSeeder.php 可调用其他 Seeder 类批量插入示例或测试数据。
五、resources 目录:前端资源与视图模板源码区
该目录存放未编译的原始前端资产与服务端渲染模板,不直接对外暴露,由 Web 服务器或构建工具处理后交付客户端。
1、resources/views 包含 Blade 模板文件,以 .blade.php 为扩展名,支持继承、组件、插槽等语法特性。
2、resources/js 和 resources/css 分别存放 JavaScript 与 CSS 源码,需经 Vite 或 Laravel Mix 编译后输出至 public/build 目录。
3、resources/lang 按语言代码(如 en、zh_CN)组织翻译文件,键值对形式定义消息文本,供 __() 函数调用。
六、routes 目录:请求分发路由定义区
所有 HTTP 请求路径与处理逻辑的映射关系均在此声明,Laravel 依据请求方法、URI 与中间件组合精确匹配执行链。
1、routes/web.php 处理面向浏览器的会话式请求,自动启用 Session、CSRF 保护及 Cookie 加密中间件。
2、routes/api.php 面向无状态 API 请求,不启用 Session,路由前缀默认为 /api,适用于前后端分离场景。
3、routes/console.php 注册 Artisan 命令行指令,每个闭包或命令类绑定唯一命令签名,如 php artisan inspire。
七、public 目录:Web 服务器唯一入口与静态资源发布点
该目录是所有外部 HTTP 请求的唯一可达路径,index.php 在此启动应用实例,所有静态文件(JS/CSS/图片)也必须置于其中方可被直接访问。
1、public/index.php 是 Laravel 的前端控制器(Front Controller),加载 bootstrap/app.php 并传入请求对象完成完整生命周期。
2、public/mix-manifest.json(若使用 Mix)或 public/build/manifest.json(若使用 Vite)记录编译后资源哈希路径,供 Blade 中 @vite 或 @mix 指令解析真实文件名。
八、tests 目录:自动化测试用例组织区
该目录按 PHPUnit 规范组织各类测试用例,覆盖单元、功能与浏览器交互场景,确保代码变更不破坏既有行为。
1、tests/Feature 存放功能测试,模拟完整 HTTP 请求并断言响应状态、JSON 结构或数据库变更。
2、tests/Unit 存放单元测试,聚焦单个类或方法逻辑,常配合 Mock 对象隔离外部依赖。
3、tests/Browser(需 Laravel Dusk)存放浏览器端测试,启动真实 Chrome 实例执行 UI 交互与断言。


















