Laravel - 项目目录结构介绍(各文件夹功能说明)
当一个 Laravel 项目创建完毕后,默认的目录结构如下:

(2)app 目录下包含多个子目录,分别如下:

虽然我们开发时可以按照自己的喜好重新组织应用的目录结构,但默认的目录结构对于大型应用还是小型应用都是有很好的参考价值。下面分别介绍各个目录的功能作用。
1,app 目录
(1)应用的核心代码位于 app 目录下。默认情况,该目录位于命名空间 App 下, 并且被 Composer 通过 PSR-4 自动载入标准自动加载。
注意:app 目录包含的是应用的核心代码,不是框架的核心代码,框架的核心代码在 /vendor/laravel/framework 里面。
(2)app 目录下包含多个子目录,分别如下:
- Console 目录:该包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。
- Exceptions 目录:该目录包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。如果你想要自定义异常如何记录或渲染,需要编辑该目录下的 Handler 类。
- Http 目录:该目录包含了控制器、中间件以及表单请求等,几乎所有通过 Web 进入应用的请求处理都在这里进行。
- Providers 目录:该目录包含应用的所有服务提供者。服务提供者在应用启动过程中绑定服务到容器、注册事件以及执行其他任务为即将到来的请求处理做好准备工作。在新安装的 Laravel 应用中,该目录已经包含了一些服务提供者,我们可以按需添加自己的服务提供者到该目录。
2,bootstrap 目录
bootstrap 目录里文件比较少:
- app.php:用于框架的启动和自动载入配置
- cache 文件夹:里面包含了框架为提升性能所生成的文件,如路由和服务缓存文件
3,config 目录
config 目录包含了应用所有的配置文件,建议通读一遍这些配置文件以便熟悉 Laravel 所有默认配置项;
4,database 目录
database 目录包含了数据库迁移文件及填充文件,如果有使用 SQLite 的话,你还可以将其作为 SQLite 数据库存放目录;
5,public 目录
public 目录包含了应用入口文件 index.php 和前端资源文件(图片、JavaScript、CSS 等),该目录也是 Apache 或 Nginx 等 Web 服务器所指向的应用根目录,这样做的好处是隔离了应用核心文件直接暴露于 Web 根目录之下,如果权限系统没做好或服务器配置有漏洞的话,很可能导致应用敏感文件被黑客窃取,进而对网站安全造成威胁;
6,resources 目录
resources 目录包含了应用视图文件和未编译的原生前端资源文件(LESS、SASS、JavaScript),以及本地化语言文件;
7,routes 目录
routes 目录包含了应用定义的所有路由。Laravel 默认提供了四个路由文件用于给不同的入口使用:
- web.php:该文件包含的路由通过 RouteServiceProvider 引入,都被约束在 web 中间件组中,因而支持 Session、CSRF 保护以及 Cookie 加密功能,如果应用无需提供无状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php 文件中。
- api.php:该文件包含的路由通过 RouteServiceProvider 引入,都被约束在 api 中间件组中,因而支持频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。
- console.php:该文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用入口(路由)。
- channels.php:该文件用于注册应用支持的所有事件广播频道。
8,storage 目录
(1)storage 目录包含了编译后的 Blade 模板、基于文件的 Session、文件缓存,以及其它由框架生成的文件。
(2)该目录被细分为成如下子目录:
- app 目录用于存放应用生成的文件
- framework 目录用于存放框架生成的文件和缓存
- logs 目录存放的是应用的日志文件。
(3)其中 storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应用根目录下的 public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。
9,tests 目录
tests 目录包含自动化测试文件,其中默认已经提供了一个开箱即用的 PHPUnit 示例;每一个测试类都要以 Test 开头,我们可以通过 phpunit 或 php vendor/bin/phpunit 命令来运行测试。
10,vendor 目录
vendor 目录包含了应用所有通过 Composer 加载的依赖。