简介
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.php
和 api.php
。web.php
包含的路由位于 RouteServiceProvider
下 web
中间件组中,提供了 session 状态、CSRF 保护以及 cookie 保护。如果你的应用不提供无状态的、RESTful API,那么你的路由几乎都会定义在 web.php
中。
api.php
包含了 RouteServiceProvider
下 api
中间件组中的路由,提供了访问限制。这些路由是无状态的,所以通过这些路由进入应用的请求需要通过 token
来进行认证,并且不会有 session 状态。
Storage 目录
storage
目录包含了编译的 Blade 模板,基于 session 的文件、缓存文件以及框架生成的其他文件。这个目录又包含 app
、 framework
和 logs
文件夹。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
目录包含了多个额外的文件夹,如 Console
、Http
、Providers
等。可以将 Console
和 Http
目录作为进入应用核心的 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 中文文档》
php 2016/08/27 17:50
博主好给力,ps:这个验证码好牛逼啊,怎么弄的?
Specs 2016/08/28 11:01
@ 一个第三方的,自己集成进来了