首页 » Laravel 5.3 中文文档 » 正文

「Laravel 5.3 中文文档」开始 – 目录结构

简介

Laravel 的目录结构想为无论大小应用都提供一个好的开端。当然,你可以根据自己的喜好来随意组织目录结构,Laravel 对于类放置在什么地方没有做任何强制的限制 – 只要 Composer 可以自动加载它就可以。

模型目录在哪?

当最初使用 Laravel 的时候,很多开发者都会疑问 models 目录在哪。其实,没有这个目录是有意为之。我们发现“models”这个词是有歧义的,对于不同的人意味着很多不同的东西。有些开发者会把“model ”看作整个的业务逻辑,而另一个则会把“models”看作与关系数据库交互的类。

基于这一点考虑,我们把 Eloquent 模型放置在了 app 目录下,并允许开发者根据自己的选择把它们放到任何地方。

根目录

App 目录

app 目录,如你所料,包含了应用所有的核心代码。后面我们会对这个目录做更详细的介绍,然而,你的应用几乎所有的类都会位于这个目录下。

Bootstrap 目录

bootstrap 目录包含了启动框架及配置自动加载的文件。该目录可能也会包含一个 cache 目录,其中会包含框架为优化性能而生成的一些文件,如路由及 Services 的缓存文件。

Config 目录

config 目录,顾名思义,包含了应用所有的配置文件。阅读所有的这些文件并熟悉所有的配置项,对你来说是一个很好的建议。

Datebase 目录

database 目录包含了数据迁移及填充的文件。如果你愿意,也可以把其作为 SQLite 数据库的存放目录。

Public 目录

public 目录包含了 index.php 文件,它是进入你应用的所有请求的入口。这个目录也可以放置一些资源文件,如图片、JavaScript、CSS 等。

Resources 目录

resource 目录包含了你的视图及原始的、未编译的资源文件,如 LESS、SASS 或 JavaScript 等,以及所有的语言包。

Routes 目录

routes 目录包含了应用所有的路由文件。默认包含两个 Laravel 的路由文件:web.phpapi.phpweb.php 包含的路由位于 RouteServiceProviderweb 中间件组中,提供了 session 状态、CSRF 保护以及 cookie 保护。如果你的应用不提供无状态的、RESTful API,那么你的路由几乎都会定义在 web.php 中。

api.php 包含了 RouteServiceProviderapi 中间件组中的路由,提供了访问限制。这些路由是无状态的,所以通过这些路由进入应用的请求需要通过 token 来进行认证,并且不会有 session 状态。

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 目录包含了 Composer 依赖。

App 目录

应用程序的核心代码都位于 app 目录下。默认情况下,这个目录位于 App 命名空间下,并使用 PSR-4 自动标准由 Composer 自动加载。

app 目录包含了多个额外的文件夹,如 ConsoleHttpProviders 等。可以将 ConsoleHttp 目录作为进入应用核心的 API。提供了 HTTP 协议及 CLI 命令行两种应用进行交互的机制,但实际上并不包含应用逻辑。换句话说,它们只是两个向应用发布命令的方式。Console 目录包含了所有的 Artisan 命令,而 Http 目录包含了控制器、中间件及请求。

当你使用 make Artiasn 命令生成类的时候,app 目录下会生成多个文件夹。例如,app/Jobs 目录本身是不存在的,直到你使用 make:job Artisan 命令来生成任务的时候才会创建。

app 目录下的很多类都可以通过 Artisan 命令来生成。可以通过在终端运行 php artisan list make 命令查看所有提供的命令。

Console 目录

Console 目录包含了所有的 Artisan 命令。这些命令可以通过 make:command 命令生成。这个目录也存放着 console 内核,即所有 Artisan 命令注册的地方,以及所有定时任务定义的地方。

Events 目录

这个目录默认是不存在的,但当你执行 event:generate 和 event:make Artisan 命令的时候就会创建。Events 目录,如你所想,是用来存放事件类的。事件可以用于提示应用的其他部分某个指定的行为已经发生,提供一个灵活、解耦的方案。

Exceptions 目录

Exceptions 包含了程序的异常处理器,以及作为存放你应用抛出的异常的地方。如果你想自定制异常如何记录及渲染,你可以更改该目录下的 Handler 类。

Http 目录

Http 目录包含了你的控制器、中间件以及表单请求。几乎所有进入应用的请求的处理逻辑都会在该目录下。

Listeners 目录

这个目录默认也是不存在的,但当你执行 event:generate 或 make:listener Artisan 命令的时候就会创建。Listeners 目录包含了处理事件的类。事件监听器会接收事件,并对其进行逻辑处理。例如,UserRegistered 事件可能会被 SendWelcomeEmail 监听器处理。

Mail 目录

这个目录默认也不存在,当执行 make:mail Artisan 命令时将会生成。Mail 包含了应用程序发送邮件所有的类。Mail 对象允许你在一个简单的类中包含创建邮件所有的逻辑,并使用 Mail::send 命令来发送。

Notifications 目录

这个目录也不存在,当你执行 make:notification Artisan 命令时将会创建。Notifications 目录包含了应用发送的所有通知,如应用中事件已经发生的简单通知。Laravel 的通知通过多种方式如邮件、Slack、SMS 或存储到数据库中,来抽象的发送通知。

Policies 目录

这个目录当你执行 make:policy Artisan 命令时才会创建。Policies 目录包含了应用授权的 policy 类。Policies 会检查用户能否对某个资源进行指定的操作。了解更多信息,请查看 授权 文档。

Providers 目录

Providers 包含了应用的服务提供者 service providers。服务提供者通过绑定服务到你的服务容器来驱动你的应用、注册事件、或执行其他任务来为进入应用的请求做准备。

在一个新的 Laravel 应用中,这个目录就已经包含了服务提供者,你可以根据需要向这个目录添加自己的服务提供者。


该篇属于专题:《Laravel 5.3 中文文档

本文共 2 个回复

  • php 2016/08/27 17:50

    博主好给力,ps:这个验证码好牛逼啊,怎么弄的?

    • Specs 2016/08/28 11:01

      @ php 一个第三方的,自己集成进来了

发表评论