跳至内容

目录结构

介绍

Laravel 的默认应用程序结构旨在为大型和小型应用程序提供良好的起点。但您可以自由地按照自己的喜好组织应用程序。Laravel 对任何给定类的位置几乎没有任何限制 - 只要 Composer 能够自动加载该类即可。

根目录

应用程序目录

app目录包含应用程序的核心代码。我们很快会更详细地探讨这个目录;不过,应用程序中的几乎所有类都会位于此目录中。

Bootstrap 目录

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

配置目录

顾名思义,该config目录包含应用程序的所有配置文件。建议您仔细阅读所有这些文件,并熟悉所有可用的选项。

数据库目录

database目录包含数据库迁移、模型Factories和种子。如果您愿意,也可以使用此目录来存储 SQLite 数据库。

公共目录

public目录包含index.php文件,它是进入应用程序的所有请求的入口点,并配置自动加载。此目录还包含您的资源,例如图像、JavaScript 和 CSS。

资源目录

resources目录包含您的视图以及原始的、未编译的资产,例如 CSS 或 JavaScript。

路线目录

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

web.php文件包含 Laravel 放置在中间件组中的路由web,这些路由提供会话状态、CSRF 保护和 Cookie 加密。如果您的应用程序不提供无状态的 RESTful API,那么所有路由很可能都定义在该web.php文件中。

console.php文件用于定义所有基于闭包的控制台命令。每个闭包都绑定到一个命令实例,从而允许以简单的方式与每个命令的 IO 方法进行交互。即使此文件未定义 HTTP 路由,它也定义了应用程序基于控制台的入口点(路由)。您还可以在此文件中安排任务console.php

或者,您可以通过和Artisan 命令为 API 路由( api.php)和广播频道( )安装额外的路由文件channels.phpinstall:apiinstall:broadcasting

api.php文件包含旨在无状态的路由,因此通过这些路由进入应用程序的请求将通过令牌进行身份验证,并且无法访问会话状态。

您可以在该文件中注册应用程序支持的channels.php所有事件广播频道。

存储目录

storage目录包含您的日志、已编译的 Blade 模板、基于文件的会话、文件缓存以及框架生成的其他文件。该目录分为appframeworklogs目录。 该app目录可用于存储应用程序生成的任何文件。 该framework目录用于存储框架生成的文件和缓存。最后, 该logs目录包含应用程序的日志文件。

storage/app/public目录可用于存储用户生成的文件(例如个人资料头像),这些文件应公开访问。您应该创建一个public/storage指向该目录的符号链接。您可以使用 Artisan 命令创建该链接php artisan storage:link

测试目录

tests目录包含您的自动化测试。示例PestPHPUnit单元测试和功能测试均已开箱即用。每个测试类都应以 为后缀。您可以使用或命令Test运行测试。或者,如果您希望更详细、更美观地呈现测试结果,可以使用 Artisan 命令运行测试/vendor/bin/pest/vendor/bin/phpunitphp artisan test

供应商目录

vendor目录包含您的Composer依赖项。

应用程序目录

应用程序的大部分内容都位于该app目录中。默认情况下,此目录位于命名空间下App,并由 Composer 使用PSR-4 自动加载标准自动加载。

默认情况下,该app目录包含HttpModelsProviders目录。但是,随着时间的推移,当您使用 make Artisan 命令生成类时,app 目录中会生成各种其他目录。例如,app/Console直到您执行 Artisan 命令生成命令类时,该目录才会存在make:command

Console目录Http将在下文的相应章节中进一步解释,但请将ConsoleHttp目录视为提供应用程序核心的 API。HTTP 协议和 CLI 都是与应用程序交互的机制,但实际上并不包含应用程序逻辑。换句话说,它们是向应用程序发出命令的两种方式。Console目录包含所有 Artisan 命令,而Http目录包含控制器、中间件和请求。

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

广播目录

Broadcasting目录包含您应用的所有广播频道类。这些类是使用make:channel命令生成的。此目录默认不存在,但在您创建第一个频道时会创建。要了解更多关于频道的信息,请参阅事件广播文档。

控制台目录

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

Events目录

event:generate此目录默认不存在,但会由和Artisan 命令自动创建make:event。该Events目录包含事件类。事件可用于提醒应用程序的其他部分已发生指定操作,从而提供极大的灵活性和解耦性。

异常目录

Exceptions目录包含应用程序的所有自定义异常。这些异常可以使用该make:exception命令生成。

Http 目录

Http目录包含你的控制器、中间件和表单请求。几乎所有处理进入应用程序的请求的逻辑都将放在此目录中。

工作目录

此目录默认不存在,但执行 Artisan 命令时会创建make:job。该Jobs目录包含应用程序的可排队作业。作业可以由应用程序排队,也可以在当前请求生命周期内同步运行。在当前请求期间同步运行的作业有时被称为“命令”,因为它们是命令模式的一种实现。

听众目录

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

邮件目录

此目录默认不存在,但执行 Artisan 命令时会创建make:mail。该Mail目录包含所有代表应用程序发送的电子邮件的类。邮件对象允许您将构建电子邮件的所有逻辑封装在一个可以使用该Mail::send方法发送的简单类中。

模型目录

Models目录包含所有Eloquent 模型类。Laravel 内置的 Eloquent ORM 提供了一个美观简洁的 ActiveRecord 实现,用于操作数据库。每个数据库表都有一个对应的“模型”,用于与该表交互。模型允许您查询表中的数据,以及向表中插入新记录。

通知目录

此目录默认不存在,但执行 Artisan 命令时会创建make:notification。该Notifications目录包含应用程序发送的所有“事务性”通知,例如有关应用程序内部发生的事件的简单通知。Laravel 的通知功能抽象了通过各种驱动程序(例如电子邮件、Slack、短信或存储在数据库中)发送通知的方式。

政策目录

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

提供者目录

Providers目录包含您应用的所有服务提供商。服务提供商通过在服务容器中绑定服务、注册事件或执行任何其他任务来引导您的应用,以便为传入的请求做好准备。

在全新的 Laravel 应用程序中,此目录已包含AppServiceProvider。您可以根据需要将自己的提供程序添加到此目录。

规则目录

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