Skip to content
全部文档

目录结构 ​

简介 ​

默认的 Laravel 应用结构旨在为大、小型应用提供良好起点。但你可以按自己喜欢的方式组织应用。Laravel 几乎不限制类的存放位置——只要 Composer 能自动加载该类即可。

根目录 ​

App 目录 ​

app 目录包含应用的核心代码。稍后我们会更详细地介绍该目录;不过,应用中几乎所有类都会放在这里。

Bootstrap 目录 ​

bootstrap 目录包含用于引导框架的 app.php 文件。该目录还包含一个 cache 目录,存放框架为性能优化生成的文件,例如路由与服务缓存文件。

Config 目录 ​

顾名思义,config 目录包含应用的所有配置文件。建议通读这些文件,熟悉可用选项。

Database 目录 ​

database 目录包含数据库迁移、模型工厂与种子数据。若需要,也可在此存放 SQLite 数据库。

Public 目录 ​

public 目录包含 index.php 文件,它是所有进入应用的请求的入口,并配置自动加载。该目录还存放图片、JavaScript、CSS 等资源。

Resources 目录 ​

resources 目录包含你的 视图,以及原始、未编译的 CSS 或 JavaScript 等资源。

Routes 目录 ​

routes 目录包含应用的所有路由定义。默认情况下,Laravel 包含两个路由文件:web.php 与 console.php。

web.php 文件包含 Laravel 放入 web 中间件组的路由,该组提供会话状态、CSRF 保护与 Cookie 加密。若应用不提供无状态的 RESTful API,则几乎所有路由都会定义在 web.php 中。

你可以在 console.php 中定义所有基于闭包的控制台命令。每个闭包都会绑定到一个命令实例,从而能方便地与各命令的 IO 方法交互。尽管该文件不定义 HTTP 路由,但它定义了进入应用的控制台入口(路由)。你也可以在 console.php 中调度任务。

可选地,你可通过 install:api 与 install:broadcasting Artisan 命令安装额外的 API 路由文件(api.php)与广播频道文件(channels.php)。

api.php 文件包含面向无状态的路由,因此通过这些路由进入应用的请求通常应通过令牌进行认证,且无法访问会话状态。

你可以在 channels.php 中注册应用支持的所有事件广播频道。

Storage 目录 ​

storage 目录包含日志、编译后的 Blade 模板、基于文件的会话、文件缓存,以及框架生成的其他文件。该目录分为 app、framework 与 logs 子目录。app 目录可用于存放应用生成的任意文件;framework 目录用于存放框架生成的文件与缓存;logs 目录则包含应用日志文件。

storage/app/public 目录可用于存放需要公开访问的用户生成文件,例如头像。你应在 public/storage 创建指向该目录的符号链接,可使用 php artisan storage:link Artisan 命令创建。

Tests 目录 ​

tests 目录包含自动化测试。开箱即提供示例 Pest 或 PHPUnit 单元测试与功能测试。每个测试类应以 Test 结尾。可使用 /vendor/bin/pest 或 /vendor/bin/phpunit 运行测试;若希望获得更详细、美观的测试结果展示,也可使用 php artisan test Artisan 命令。

Vendor 目录 ​

vendor 目录包含你的 Composer 依赖。

App 目录 ​

应用的大部分代码位于 app 目录。默认情况下,该目录命名空间为 App,并由 Composer 按 PSR-4 自动加载标准 自动加载。

默认情况下,app 目录包含 Http、Models 与 Providers 目录。随着你使用 make 系列 Artisan 命令生成类,还会陆续生成其他目录。例如,在执行 make:command 生成命令类之前,app/Console 目录并不存在。

Console 与 Http 目录将在下文各自章节中进一步说明;可以把它们看作进入应用核心的 API。HTTP 协议与 CLI 都是与应用交互的机制,本身并不包含业务逻辑。换言之,它们是向应用发出命令的两种方式。Console 目录包含所有 Artisan 命令,而 Http 目录包含控制器、中间件与请求。

INFO

app 目录中的许多类都可通过 Artisan 命令生成。要查看可用命令,请在终端运行 php artisan list make。

Broadcasting 目录 ​

Broadcasting 目录包含应用的所有广播频道类。这些类由 make:channel 命令生成。该目录默认不存在,创建第一个频道时会自动创建。要了解更多,请参阅事件广播文档。

Console 目录 ​

Console 目录包含应用的所有自定义 Artisan 命令。这些命令可通过 make:command 生成。

Events 目录 ​

该目录默认不存在,会由 event:generate 与 make:event Artisan 命令创建。Events 目录存放事件类。事件可用于通知应用其他部分某个操作已发生,从而提供高度灵活性与解耦。

Exceptions 目录 ​

Exceptions 目录包含应用的所有自定义异常。这些异常可通过 make:exception 生成。

Http 目录 ​

Http 目录包含控制器、中间件与表单请求。几乎所有处理进入应用请求的逻辑都会放在这里。

Jobs 目录 ​

该目录默认不存在,执行 make:job Artisan 命令时会创建。Jobs 目录存放应用的可入队任务。任务可由应用入队,也可在当前请求生命周期内同步运行。在当前请求中同步运行的任务有时也称为「命令」,因为它们是命令模式的一种实现。

Listeners 目录 ​

该目录默认不存在,执行 event:generate 或 make:listener Artisan 命令时会创建。Listeners 目录包含处理事件的类。事件监听器接收事件实例,并在事件触发时执行逻辑。例如,UserRegistered 事件可能由 SendWelcomeEmail 监听器处理。

Mail 目录 ​

该目录默认不存在,执行 make:mail Artisan 命令时会创建。Mail 目录包含表示应用所发邮件的全部类。邮件对象可将构建邮件的全部逻辑封装在一个简单类中,并通过 Mail::send 方法发送。

Models 目录 ​

Models 目录包含所有 Eloquent 模型类。Laravel 内置的 Eloquent ORM 提供优美、简洁的 ActiveRecord 实现来操作数据库。每个数据表对应一个「Model」,用于与该表交互。模型可用于查询表数据,也可向表中插入新记录。

Notifications 目录 ​

该目录默认不存在,执行 make:notification Artisan 命令时会创建。Notifications 目录包含应用发送的所有「事务型」通知,例如关于应用内事件的简单通知。Laravel 的通知功能抽象了通过邮件、Slack、SMS 或数据库存储等多种驱动发送通知的过程。

Policies 目录 ​

该目录默认不存在,执行 make:policy Artisan 命令时会创建。Policies 目录包含应用的授权策略类。策略用于判断用户是否可对某资源执行给定操作。

Providers 目录 ​

Providers 目录包含应用的所有服务提供者。服务提供者通过在服务容器中绑定服务、注册事件,或执行其他准备工作来引导应用以处理传入请求。

在全新的 Laravel 应用中,该目录已包含 AppServiceProvider。你可按需向该目录添加自己的提供者。

Rules 目录 ​

该目录默认不存在,执行 make:rule Artisan 命令时会创建。Rules 目录包含应用的自定义验证规则对象。规则用于将复杂验证逻辑封装在简单对象中。更多信息请参阅验证文档。