Laravel - 应用结构
Laravel - 应用结构
Section titled “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 目录
Section titled “app 目录”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 能够自动加载你的类,你可以根据需要以不同的方式组织你的应用。