Laravel 目录结构 | ||
---|---|---|
app | 应用目录 | 该目录包含了应用的核心代码 |
|— Broadcasting | 广播频道类目录 | 该目录包含了应用所需 |
|— Console | 自定义 Artisan 命令类目录 | 该目录包含了应用所有自定义 Artisan 命令,这些类可以使用 make:command 命令生成。 |
|— kernel.php | 该类可以注册自定义的 Artisan 命令以及定义 调度任务 。 | |
|— Events | 事件类目录 | 该目录 默认不存在 ,但是可以通过 event:generate 和 make:event 命令创建。该目录用于存放事件类。事件类用于告知应用其他部分某个事件发生情况并提供灵活的、解耦的处理机制。 |
|— Exceptions | 异常处理类目录 | 该目录包含了应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。如果想要自定义异常如何记录或渲染,需要编辑该目录下的 Handler 类。 |
|— Http | 应用请求处理类目录 | 该目录包含了 控制器 、中间件 、表单请求 等,几乎所有通过 Web 进入应用的请求处理都在这里进行。 |
|— Jobs | 队列任务类目录 | 该目录 默认不存在 ,但是可以通过 make:job 命令生成,Jobs 目录用于存放 队列任务,应用中的任务可以被推送到队列,也可以在当前请求生命周期内同步执行。同步执行的任务有时也被看作命令,因为它们实现了 命令模式 。 |
|— Listeners | 事件监听器类目录 | 该目录 默认不存在 ,但是可以通过 event:generate 和 make:listener 命令创建。Listeners 目录包含处理事件的类(事件监听器),事件监听器接收一个事件并提供对该事件发生后的响应逻辑,例如UserRegistered 事件可以被 SendWelcomeEmail 监听器处理。 |
邮件相关类目录 | 该目录 默认不存在,但是可以通过 make:mail 命令生成,Mail 目录包含应用所有邮件相关类,邮件对象允许你在一个地方封装构建邮件所需的所有业务逻辑,然后使用 Mail::send 方法发送邮件。 |
|
|— Models | 模型类目录 | 该目录包含了所有 Eloquent 模型类文件。laravel 自带的 Eloquent ORM 提供了一个优雅且简单的、用于处理数据库操作的 ActiveRecord 实现。每张数据表都有一个与之对应的[模型类],通过调用模型防范可以映射数据表的增删改查。 |
|— Notifications | 通知类目录 | 该目录 默认不存在 ,但是可以通过 make:notification 命令连带创建,Notifications 目录包含应用发送的所有通知,比如事件发生通知。Laravel 的通知功能将通知发送和通知驱动解耦,你可以通过邮件,也可以用过 Slack 、短信或者数据库发送通知。 |
|— Policies | 策略类目录 | 该目录 默认不存在 ,但是可以通过 make:policy 命令生成策略类来创建,Policies 目录包含了应用所有的授权策略类,策略用于判断用户是否有权限去访问指定资源。 |
|— Providers | 服务提供者类目录 | 该目录包含了应用的所有 服务提供者 。服务提供者在应用启动过程中绑定服务到容器、注册事件以及执行其他任务,为即将到来的请求处理做到准备工作。 在新安装的 Laravel 应用中,该目录已经包含了一些服务提供者,你可以按需添加自己的服务提供者到该目录。 |
|— Rules | 自定义验证规则类目录 | 该目录 默认不存在 ,但是可以通过 mak:rule 命令连带创建。Rules 目录包含应用的自定义验证规则对象,这些规则用于在单个对象中封装复杂的验证逻辑。 |
bootstrap | 启动目录 | 该目录包含了少许文件,app.php 用于框架的启动和自带载入配置,还有一个 cache 文件夹,里面包含了框架为提升性能所生成的文件,如路由和服务缓存文件 |
config | 配置目录 | 该目录包含了应用所有的配置文件,建议通读一遍这些配置文件以便熟悉 Laravel 所有默认的配置项 |
database | 数据库目录 | 该目录包含了数据迁移文件及填充文件,如果使用 SQLite 的话,还可以将其作为 SQLite 的数据库存放目录。 |
public | 对外公开目录 | 该目录包含了应用入口文件 index.php 和前端资源文件(图片、JavaScript、CSS 等),该目录也是 Apache 或 Nginx 等 Web 服务器所指向的应用根目录,这样做的好处是隔离了应用核心文件直接暴露与 Web 根目录之下,如果权限系统改没有做好或服务器配置有漏洞的话,很可能导致应用敏感文件被黑客窃取,进而对网站安全造成威胁。 |
resources | 资源目录 | 该目录包含了应用试图文件和未编译的原生前端资源文件(LESS、SASS、JavaScript),以及本地化语言文件。 |
routes | 路由目录 | 该目录包含了应用定义的所有路由。Laravel 默认提供了四个路由文件用于给不同的入口使用:web.php 、api.php 、console.php 、channels.php 。 |
|— web.php | 该文件包含的路由通过 RouteServiceProvider 引入,都被约束在 web 中间件中,因而支持 Session、CSRF 保护以及 Cookie 加密功能,如果应用无需提供无状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php 文件中。 |
|
|— api.php | 该文件包含的路由通过 RouteServiceProvider 引入,都被约束在 api 中间件中,因而支持频率限制功能,这些路由都是无状态的,所以请求通过这些路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。 |
|
|— console.php | 该文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用入口(路由)。 | |
|— channels.php | 该文件用于注册应用支持的所有事件广播频道。 | |
storage | 文件存储目录 | 该目录包含了编译后的 Blade 模板、基于文件的 Session、文件缓存,以及其他由框架生成的文件,该目录被细分成 app 、framework 、logs 子目录, |
|— app | 该目录用于存放应用生成的文件。 | |
|— public | 该目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,还需要在应用根目录的 public 目录下生成一个软连接 storage 指向这个目录。可以通过 php artisan storage:like 命令生成这个软链接。 |
|
|— framework | 该目录用于存放框架生成的文件和缓存。 | |
|— logs | 该目录存放的是应用的日志文件。 | |
tests | 测试目录 | 该目录包含了自动化测试文件,其中默认已经提供了一个开箱即用的 PHPUnit 示例。每一个测试类都要以 Test 开头,可以通过 phpunit 或 php vendor/bin/phpunit 命令来运行测试。 |
vendor | Vendor目录 | 该目录包含了应用所有通过 Composer 加载的依赖。其中 vendor/laravel/framework 目录下包含了 Laravel 框架的核心代码。 |