# 目录结构

参考：[Laravel 的文件夹结构](https://docs.golaravel.com/docs/5.4/structure/)

## Laravel 目录结构

|      顶级目录     |                                 作用                                |
| :-----------: | :---------------------------------------------------------------: |
|      app      |       主要包含应用程序的核心代码，用户构建应用的大部分工作都在这个目录下进行，包括路由文件、控制器文件、模型文件等      |
|   bootstrap   |                        主要包含几个框架启动和自动加载配置的文件                       |
|     config    |                         主要包含应用程序常用的配置文件信息                         |
|    database   |                          主要包含数据库迁移和数据填充文件                         |
|     public    | 为应用程序的入口目录，包含应用程序入口文件index.php,同时包含静态资源文件：如CSS、Javascript、images等 |
|   resources   |                              主要包含视图文件                             |
|     store     |               包含编译后的Blade模板，基于文件 session、文件缓存和日志等文件               |
|     tests     |                            主要包含自动化测试文件                            |
|     vendor    |                    主要包含依赖库文件，其中包含Laravel框架的源代码                    |
|     .env文件    |                      一个重要的文件，为Laravel框架主配置文件                      |
| composer.json |                          composer项目依赖管理文件                         |

### app目录介绍

应用程序 大部分内容都存在于app目录下，该目录通过composer使用自动加载标注（PSR-4）来自动加载其中的文件。

该目录下的组织结构

|     目录     |                            作用                            |
| :--------: | :------------------------------------------------------: |
|   Console  |                     主要包含所有的artisan命令                     |
|   Events   |                        用来放置于事件相关的类                       |
| Exceptions |               包含应用程序的异常处理类，用于处理应用程序抛出的任何异常               |
|    Http    | 主要包含路由文件、控制器文件、请求文件、中间件文件等，是应用程序与Laravel框架源代码等外部库交互 主要地方 |
|    Jobs    |                     主要包含消息队列的各种消息类文件                     |
|  Listeners |                        主要包含监听事件类文件                       |
|  Providers |                      主要包含服务提供者的相关文件                      |

### Vendor目录介绍

vendor目录主要包含Laravel应用程序的外部依赖库，包括Laravel框架的源代码部分。该目录种文件的组织结构是根据依赖关系决定 ，每一个文件夹都是一个功能模块，可以单独通过composer下载该组件进行使用，相当于整个Vendor目录就是一个个相互依赖的功能组件模块组织起来的，它们可以独立工作，也可以被组织起来协调工作，下面介绍几个主要的目录结构：

|    目录    |                                                                           作用                                                                           |
| :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: |
| composer |                                                     主要包括composer按照PSR规范生成的自动加载类，应用程序 的自动加载都是由这部分实现                                                     |
|  laravel | 包含Laravel框架源代码，代码部分都包含爱vendor\laravel\framework\src\Illuminate文件夹下，在该文件夹下又包含很多文件夹，每一个文件夹又是一个组件，如用于管理session的session组件、用于实现路由功能的routing组件，这些组件都是可以独立工作的 |
|  symfony |                                                       Laravel的底层（如请求类、响应类、文件管理类等）使用了symfony框架的部分                                                       |
|  monolog |                                                                       包含日志记录模块文件                                                                       |
|  phpunit |                                                                      包含程序单元测试模块文件                                                                      |

### 资料

**这是之前的整理，留下来做参考吧：**

以下为５.2的目录结构，还未修改成5.4版本，引用自：[Laravel5.2目录结构及composer.json文件解析](http://www.jianshu.com/p/909a650a240f)

｜– app 包含Controller、Model、路由等在内的应用目录，大部分业务将在该目录下进行\
｜ ｜– Console 命令行程序目录\
｜ ｜ ｜– Commands 包含了用于命令行执行的类，可在该目录下自定义类\
｜ ｜ ｜– Kernel.php 命令调用内核文件，包含commands变量(命令清单，自定义的命令需加入到这里)和schedule方法(用于任务调度，即定时任务)\
｜ ｜– Events 事件目录\
｜ ｜– Exceptions 包含了自定义错误和异常处理类\
｜ ｜– Http HTTP传输层相关的类目录\
｜ ｜ ｜– Controllers 控制器目录\
｜ ｜ ｜– Middleware 中间件目录\
｜ ｜ ｜– Requests 请求类目录\
｜ ｜ ｜– Kernel.php 包含http中间件和路由中间件的内核文件\
｜ ｜ ｜– routes.php 强大的路由\
｜ ｜– Jobs 该目录下包含队列的任务类\
｜ ｜– Listeners 监听器目录\
｜ ｜– Providers 服务提供者目录\
｜ ｜– User.php 自带的模型实例，我们新建的Model默认也存储在该目录\
｜– bootstrap 框架启动载入目录\
｜ ｜– app.php 创建框架应用实例\
｜ ｜– autoload.php 自动加载\
｜ ｜– cache 存放框架启动缓存，web服务器需要有该目录的写入权限\
｜– config 各种配置文件的目录\
｜ ｜– app.php 系统级配置文件\
｜ ｜– auth.php 用户身份认证配置文件，指定好table和model就可以很方便地用身份认证功能了\
｜ ｜– broadcasting.php 事件广播配置文件\
｜ ｜– cache.php 缓存配置文件\
｜ ｜– compile.php 编译额外文件和类需要的配置文件，一般用户很少用到\
｜ ｜– database.php 数据库配置文件\
｜ ｜– filesystems.php 文件系统配置文件，这里可以配置云存储参数\
｜ ｜– mail.php 电子邮件配置文件\
｜ ｜– queue.php 消息队列配置文件\
｜ ｜– services.php 可存放第三方服务的配置信息\
｜ ｜– session.php 配置session的存储方式、生命周期等信息\
｜ ｜– view\.php 模板文件配置文件，包含模板目录和编译目录等\
｜– database 数据库相关目录\
｜ ｜– factories 5.1以上版本的新特性，工厂类目录，也是用于数据填充\
｜ ｜ ｜– ModelFactory.php 在该文件可定义不同Model所需填充的数据类型\
｜ ｜– migrations 存储数据库迁移文件\
｜ ｜– seeds 存放数据填充类的目录\
｜ ｜– DatabaseSeeder.php 执行php artisan db:seed命令将会调用该类的run方法。该方法可调用执行该目录下其他Seeder类，也可调用factories方法生成ModelFactory里定义的数据模型\
｜– public 网站入口，应当将ip或域名指向该目录而不是根目录。可供外部访问的css、js和图片等资源皆放置于此\
｜ ｜– index.php 入口文件\
｜ ｜– .htaccess Apache服务器用该文件重写URL\
｜ ｜– web.config IIS服务器用该文件重写URL\
｜– resources 资源文件目录\
｜ ｜– assets 可存放包含LESS、SASS、CoffeeScript在内的原始资源文件\
｜ ｜– lang 本地化文件目录\
｜ ｜– views 视图文件就放在这啦\
｜– storage 存储目录。web服务器需要有该目录及所有子目录的写入权限\
｜ ｜– app 可用于存储应用程序所需的一些文件\
｜ ｜– framework 该目录下包括缓存、sessions和编译后的视图文件\
｜ ｜– logs 日志目录\
｜– tests 测试目录\
｜– vendor 该目录下包含Laravel源代码和第三方依赖包\
｜– .env 环境配置文件。config目录下的配置文件会使用该文件里面的参数，不同生产环境使用不同的.env文件即可。\
｜– artisan 强大的命令行接口，你可以在app/Console/Commands下编写自定义命令\
｜– composer.json 存放依赖关系的文件\
｜– composer.lock 锁文件，存放安装时依赖包的真实版本\
｜– gulpfile.js gulp（一种前端构建工具）配置文件\
｜– package.json gulp配置文件\
｜– phpspec.yml phpspec（一种PHP测试框架）配置文件\
｜– phpunit.xml phpunit（一种PHP测试框架）配置文件\
｜– server.php PHP内置的Web服务器将把这个文件作为入口。以public/index.php为入口的可以忽略掉该文件

[\[ Laravel 5.7 文档 \] 快速入门 —— 目录结构](https://laravelacademy.org/post/9529.html)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xiaoxiami.gitbook.io/laravel/laravel-ji-chu/mu-lu-jie-gou.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
