目录结构
介绍
Laravel 的默认应用程序结构旨在为大型和小型应用程序提供良好的起点。但您可以自由地按照自己的喜好组织应用程序。Laravel 对任何给定类的位置几乎没有任何限制 - 只要 Composer 能够自动加载该类即可。
根目录
应用程序目录
该app
目录包含应用程序的核心代码。我们很快会更详细地探讨这个目录;不过,应用程序中的几乎所有类都会位于此目录中。
Bootstrap 目录
该bootstrap
目录包含app.php
框架的引导文件。此外,该目录还包含cache
用于性能优化的框架生成的文件,例如路由和服务缓存文件。
配置目录
顾名思义,该config
目录包含应用程序的所有配置文件。建议您仔细阅读所有这些文件,并熟悉所有可用的选项。
数据库目录
该database
目录包含数据库迁移、模型Factories和种子。如果您愿意,也可以使用此目录来存储 SQLite 数据库。
公共目录
该public
目录包含index.php
文件,它是进入应用程序的所有请求的入口点,并配置自动加载。此目录还包含您的资源,例如图像、JavaScript 和 CSS。
资源目录
该resources
目录包含您的视图以及原始的、未编译的资产,例如 CSS 或 JavaScript。
路线目录
该routes
目录包含应用程序的所有路由定义。默认情况下,Laravel 包含两个路由文件:web.php
和console.php
。
该web.php
文件包含 Laravel 放置在中间件组中的路由web
,这些路由提供会话状态、CSRF 保护和 Cookie 加密。如果您的应用程序不提供无状态的 RESTful API,那么所有路由很可能都定义在该web.php
文件中。
该console.php
文件用于定义所有基于闭包的控制台命令。每个闭包都绑定到一个命令实例,从而允许以简单的方式与每个命令的 IO 方法进行交互。即使此文件未定义 HTTP 路由,它也定义了应用程序基于控制台的入口点(路由)。您还可以在此文件中安排任务console.php
。
或者,您可以通过和Artisan 命令为 API 路由( api.php
)和广播频道( )安装额外的路由文件。channels.php
install:api
install:broadcasting
该api.php
文件包含旨在无状态的路由,因此通过这些路由进入应用程序的请求将通过令牌进行身份验证,并且无法访问会话状态。
您可以在该文件中注册应用程序支持的channels.php
所有事件广播频道。
存储目录
该storage
目录包含您的日志、已编译的 Blade 模板、基于文件的会话、文件缓存以及框架生成的其他文件。该目录分为app
、framework
和logs
目录。 该app
目录可用于存储应用程序生成的任何文件。 该framework
目录用于存储框架生成的文件和缓存。最后, 该logs
目录包含应用程序的日志文件。
该storage/app/public
目录可用于存储用户生成的文件(例如个人资料头像),这些文件应公开访问。您应该创建一个public/storage
指向该目录的符号链接。您可以使用 Artisan 命令创建该链接php artisan storage:link
。
测试目录
该tests
目录包含您的自动化测试。示例Pest或PHPUnit单元测试和功能测试均已开箱即用。每个测试类都应以 为后缀。您可以使用或命令Test
运行测试。或者,如果您希望更详细、更美观地呈现测试结果,可以使用 Artisan 命令运行测试。/vendor/bin/pest
/vendor/bin/phpunit
php artisan test
供应商目录
该vendor
目录包含您的Composer依赖项。
应用程序目录
应用程序的大部分内容都位于该app
目录中。默认情况下,此目录位于命名空间下App
,并由 Composer 使用PSR-4 自动加载标准自动加载。
默认情况下,该app
目录包含Http
、Models
和Providers
目录。但是,随着时间的推移,当您使用 make Artisan 命令生成类时,app 目录中会生成各种其他目录。例如,app/Console
直到您执行 Artisan 命令生成命令类时,该目录才会存在make:command
。
Console
和目录Http
将在下文的相应章节中进一步解释,但请将Console
和Http
目录视为提供应用程序核心的 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:listener
Artisan 命令时会创建。该目录包含处理事件的Listeners
类。事件监听器接收事件实例,并执行触发事件的逻辑。例如,一个事件可能由监听器处理。UserRegistered
SendWelcomeEmail
邮件目录
此目录默认不存在,但执行 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
目录包含应用程序的自定义验证规则对象。规则用于将复杂的验证逻辑封装到一个简单的对象中。更多信息,请参阅验证文档。