Skip to content

Laravel - 应用结构

一个标准的 Laravel 应用拥有一个组织良好的目录结构,旨在对小型和大型应用都保持直观。以下是关键目录的概述:

全新安装的 Laravel 应用的根目录包含几个重要的文件夹和文件:

  • app - 这是你应用的核心代码所在之处,包括模型 (models)、控制器 (controllers)、服务提供者 (service providers) 等等。你大部分时间都会在这个目录中度过。
  • bootstrap - 包含引导框架和配置自动加载的文件。cache 子目录用于存放框架生成的缓存文件,以优化性能。
  • config - 存放你应用的所有配置文件。熟悉这些文件及其可用选项是一个好习惯。
  • database - 包含你的数据库迁移 (migrations)、模型工厂 (model factories) 和数据填充 (seeds)。迁移允许你对数据库 schema 进行版本控制。
  • public - 这是你应用的文档根目录 (document root),也是你的 Web 服务器唯一应该公开访问的目录。它包含入口文件 index.php 以及由 Vite 等工具管理的编译后的资源 (compiled assets)(如 CSS, JavaScript, 图片)。
  • resources - 包含你的视图 (views) (Blade 模板)、原始未编译资源 (raw uncompiled assets)(如未使用 Vite 默认结构时的 JavaScript/CSS 源文件)以及用于本地化 (localization) 的语言文件 (language files)。
  • routes - 你应用的所有路由定义都位于此处。它包括 web.php (用于 Web 界面路由)、api.php (用于 API 路由)、console.php (用于自定义 Artisan 命令) 和 channels.php (用于事件广播频道)。
  • storage - 包含编译后的 Blade 模板、基于文件的 Session、文件缓存、应用生成的日志以及框架生成的其他文件。storage/app/public 目录可用于存储应公开访问的用户生成文件(如头像),但需要运行 php artisan storage:link。
  • tests - 包含你的自动化测试,包括单元测试 (unit tests) 和功能测试 (feature tests)。PHPUnit 是默认的测试框架。
  • vendor - 包含你的 Composer 依赖。通常你不会直接修改此目录中的文件。
  • .env - (环境变量文件) 这个位于项目根目录的文件包含环境特定的配置,如数据库凭据、API 密钥和应用设置。它不应该被提交到版本控制中。

app 目录是你应用的心脏。默认情况下,它使用 App 命名空间,并由 Composer 遵循 PSR-4 自动加载标准进行自动加载 (autoloading)。以下是 app 目录中一些常见子目录的细分:

  • Console - 包含你的自定义 Artisan 命令。此目录中的 Kernel.php 文件是你注册自定义命令的地方。
  • Events - 存储事件类。事件可用于解耦应用的不同方面,允许其他部分在特定动作发生时作出响应。
  • Exceptions - 包含你应用的自定义异常处理器 (Handler.php),也是放置任何自定义异常类的好地方。
  • Http - 这是你的控制器 (controllers)、中间件 (middleware) 和表单请求 (form requests) 所在之处。
  • Jobs - 包含你应用的可排队任务 (queueable jobs)。任务可以推送到队列中,以便在后台异步处理,从而提高应用响应性。
  • Listeners - 包含处理事件的监听器类。监听器接收一个事件实例并根据该事件执行逻辑。
  • Mail - 包含你的可邮寄类 (mailable classes)。每个类代表应用可以发送的一封电子邮件,通常使用 Blade 模板作为邮件内容。
  • Models - 包含你的 Eloquent 模型类。每个模型通常代表一个数据库表,并允许你与该表的数据进行交互。
  • Notifications - 存储用于通过各种渠道(如电子邮件、Slack、SMS)发送简短信息通知的类。
  • Policies - 包含授权策略类。策略围绕特定模型或资源组织授权逻辑。
  • Providers - 包含你应用的服务提供者 (service providers)。服务提供者是引导 (bootstrapping) Laravel 应用的核心,负责注册服务容器绑定 (service container bindings)、事件监听器、中间件甚至路由。
  • Rules - 这是存储自定义验证规则对象的好地方。

理解这个结构将帮助你更有效地导航和构建 Laravel 应用。虽然 Laravel 提供了这个默认结构,但只要 Composer 能够自动加载你的类,你可以根据需要以不同的方式组织你的应用。