Skip to content
全部文档

目录结构

简介

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

INFO

刚接触 Laravel?欢迎查看 Laravel Bootcamp,在动手构建第一个 Laravel 应用的同时,带你快速了解框架。

根目录

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.phpconsole.php

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

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

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

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

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

Storage 目录

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

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

Tests 目录

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

Vendor 目录

vendor 目录包含你的 Composer 依赖。

App 目录

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

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

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

INFO

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

Broadcasting 目录

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

Console 目录

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

Events 目录

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

Exceptions 目录

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

Http 目录

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

Jobs 目录

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

Listeners 目录

该目录默认不存在,执行 event:generatemake: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 目录包含应用的自定义验证规则对象。规则用于将复杂验证逻辑封装在简单对象中。更多信息请参阅验证文档