Laravel 的文件夹结构

默认的 Laravel 应用结构旨在为不同大小的应用提供一个很好的起点。当然,您可以随意组织您的应用程序。Laravel 对任何给定类的位置几乎没有任何限制,只要它们能被 Composer 自动加载。

为什么没有模型目录?

当开始使用 Laravel 时,许多开发人员都因缺少 models 目录而感到困惑。然而,缺少这样的目录是故意的。我们发现「模型」含糊不清,因为不同的人对「模型」有不同的理解。一些开发者把应用的「模型」称为其所有业务逻辑的总体,而另一些人将「模型」称为与关系数据库交互的类。

出于这个原因,我们默认把 Eloquent 的模型放在 app 目录下,并允许开发人员将它们放在其他地方。

App 目录

app 目录包含应用程序的核心代码。你应用中几乎所有的类都应该放在这里。稍后我们会更深入地了解这个目录的细节。

Bootstrap 目录

bootstrap目录包含引导框架的app.php文件。该目录还包含了一个 cache 目录, cache 目录下存放着框架生成的用来提升性能的文件,比如路由和服务缓存文件。

Config 目录

config 目录,顾名思义,包含应用程序所有的配置文件。我们鼓励你通读这些文件,以便帮助你熟悉所有可用的选项。

Database 目录

database 目录包含数据填充和迁移文件以及模型工厂类。你还可以把它作为 SQLite 数据库存放目录。

Public 目录

public 目录包含了入口文件 index.php ,它是进入应用程序的所有请求的入口点。此目录还包含了一些你的资源文件(如图片、JavaScript 和 CSS)。

Resources 目录

resources 目录包含了视图和未编译的资源文件(如 LESS、SASS 或 JavaScript)。此目录还包含你所有的语言文件。

Routes 目录

routes 目录包含了应用的所有路由定义,Laravel 默认包含了几个路由文件:、api.phpconsole.phpchannels.php

web.php 文件包含 RouteServiceProvider 放置在 web 中间件组中的路由,它提供会话状态、CSRF 防护和 cookie 加密。如果你的应用不提供无状态的、RESTful 风格的 API,则所有的路由都应该在 web.php 文件中定义。.

console.php 文件是定义所有基于控制台命令闭包函数的地方。每个闭包函数都被绑定到一个命令实例并且允许和命令行 IO 方法进行简单的交互。尽管这些文件没有定义 HTTP 路由,但它也将基于控制台的入口点(路由)定义到应用程序中。

channels.php 用来注册你的应用支持的所有的事件广播渠道的地方。

Storage 目录

storage 目录包含编译后的 Blade 模板、session 会话生成的文件、缓存文件以及框架生成的其他文件。这个目录被细分成 appframeworklogs 三个子目录。app 目录可以用来存储应用生成的任何文件。 framework 目录用来存储框架生成的文件和缓存。最后, logs 目录包含应用的日志文件。

storage/app/public 可以用来存储用户生成的文件,比如需要公开访问的用户头像。你应该创建一个 public/storage 的软链接指向这个目录。你可以直接通过 php artisan storage:link 命令来创建此链接。

Tests 目录

tests 目录包含自动化测试文件。在 PHPUnit 有现成的范例供你参考. 每个测试类都应该以 Test 作为后缀。你可以使用 phpunit 或者 php vendor/bin/phpunit 命令来运行测试。

Vendor 目录

vendor 目录包含你所有的 依赖包。

你的大部分的应用程序都位于 app 目录中。默认情况下,此目录的命名空间为 App,并通过 Composer 使用 自动加载。

app 目录包含额外的各种目录,比如:ConsoleHttpProviders。将 Console 和 目录视为向应用程序的核心提供 API。HTTP 协议和 CLI 都是与应用程序交互的机制,但实际上并不包含应用程序逻辑。换句话说,它们是向你的应用程序发出命令的两种方式。Console 目录包含所有的 Artisan 命令,而 Http 目录包含你的控制器,中间件和请求。

当你使用 make Artisan 命令生成类时,将在 app 目录下生成各种其它目录。因此,例如,app/Jobs 目录直到你执行 make:job Artisan 命令去生成一个作业类之前将不存在

Broadcasting 目录

Broadcasting 目录包含应用程序的所有广播通道类。这些类使用 make:channel 命令生成。此目录默认时不存在的,但是当你创建第一个通道时它将被创建。要了解更多的关于频道的信息,查看有关文档 事件广播

Console 目录

Console 目录包含应用程序的所有自定义 Artisan 命令。这些命令可以使用 make:command 命令生成。此目录也安置了控制台内核,在其中你可以注册自定义的 Artisan 命令,并定义 。

Events 目录

Exceptions 目录

Exceptions 目录包含应用程序的异常处理,并且也是一个放置应用程序抛出任何异常的好地方。如果你想自定义异常的记录和渲染方式,你应该修改此目录中的 Handler 类。

Http 目录

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

Jobs 目录

默认情况下这个目录是不存在的,但如果你执行 make:job Artisan 命令时,它将被创建出来。Jobs 目录包含应用程序的 队列。Jobs 可以进入队列,也可以在当前请求的生命周期内同步运行。在当前请求期间同步运行的 Jobs 有时会称为『命令』,因为它们是 的一个实现。

Listeners 目录

默认情况下这个目录是不存在的,但如果你执行了 event:generate 或者 make:listener Artisan 命令时,它将会被创建出来。Listeners 目录包含 事件 的处理类。事件侦听器接收一个事件实例并执行逻辑以响应被触发的事件。例如,一个 UserRegistered 事件可能被 SendWelcomeEmail 侦听器处理。

Mail 目录

默认情况下这个目录是不存在的,但如果你执行 make:mail Artisan 命令,它将被创建出来。Mail 目录包含应用程序发送邮件的所有类。邮件对象允许你去构建一个封装所有逻辑的邮件类,这个简单类中可以使用 Mail::send 方法发送邮件。

Notifications 目录

默认情况下这个目录是不存在的,但如果你执行 make:notification Artisan 命令,它将被创建出来。Notifications 目录包含应用程序的发送的所有『事务』通知,比如关于应用程序中发生的事件的简单通知。Laravel 的通知功能抽象了通过各种驱动(如:电子邮件,Slack,SMS 或者存储在数据库中)去发送通知。

Policies 目录

默认情况下这个目录是不存在的,但如果你执行 make:policy Artisan 命令,它将被创建出来。Policies 目录包含应用程序的授权策略类。策略用于确定一个用户是否对一个资源能否执行一个给定的操作。有关更多信息,查看 。

Providers 目录

Providers 目录包含应用程序的所有 服务提供者。服务提供者通过在服务容器中绑定服务引导应用程序,注册事件或者准备为应用程序即将到来的请求执行其它任何任务。

在一个新的 Laravel 应用中,此目录已经包含一些提供者。你可以根据需要随意将你自己的提供者添加到此目录中。

Rules 目录

默认情况下这个目录是不存在的,但如果你执行 make:rule Artisan 命令,它将被创建出来。 目录包含应用程序的自定义验证规则对象。规则用于将复杂的验证逻辑封装在一个简单对象中。关于更多信息,查看 。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接 我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。