> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 目录结构

> 介绍 Laravel 项目主要目录与文件的作用。

## 简介

Laravel 默认的应用结构为大型和小型应用都提供了合适的起点。
不过，你也可以完全自由地组织应用结构。
Laravel 几乎不限制类应放在什么位置。只要 Composer 能自动加载即可。

## 根目录

创建新的 Laravel 项目后，会生成如下的目录结构。

```
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json
```

### `app/` 目录

存放应用核心代码的目录。
控制器、模型、中间件等，应用中几乎所有的类都放在这里。

默认情况下，包含 `Http`、`Models`、`Providers` 三个子目录。
通过 Artisan 命令生成类时，也会自动创建其他子目录。

### `bootstrap/` 目录

包含用于启动框架的 `app.php` 文件。
此外，还包含用于存放路由缓存、服务缓存等性能优化文件的 `cache/` 目录。

### `config/` 目录

存放应用的所有配置文件。
建议你阅读这些文件，以便了解可用的选项。

### `database/` 目录

存放数据库迁移、模型工厂、Seeder。
SQLite 数据库文件也可以放在这里。

### `public/` 目录

包含所有请求的入口文件 `index.php`。
另外，图片、JavaScript、CSS 等静态资源也存放于此。

<Warning>
  请将 Web 服务器的文档根目录设置为 Laravel 项目的 `public/` 目录。
  如果直接暴露项目根目录或其他子目录，可能会导致敏感文件被访问。
</Warning>

### `resources/` 目录

存放[视图](/zh/views)以及尚未编译的 CSS、JavaScript 等原始资源文件。

### `routes/` 目录

存放应用的所有路由定义。
默认包含 `web.php` 与 `console.php` 两个路由文件。

| 文件             | 用途                                                     |
| -------------- | ------------------------------------------------------ |
| `web.php`      | 面向浏览器的路由。会应用提供 Session、CSRF 保护和 Cookie 加密的 `web` 中间件组。 |
| `console.php`  | 通过闭包定义 Artisan 命令的文件。                                  |
| `api.php`      | 无状态的 API 路由。通过 `install:api` 命令添加。                     |
| `channels.php` | 用于注册事件广播频道的文件。                                         |

### `storage/` 目录

存放日志、编译后的 Blade 模板、基于文件的 Session、文件缓存等由框架生成的文件。
分为 `app/`、`framework/`、`logs/` 三个子目录。

### `tests/` 目录

存放自动化测试。
默认包含通过 [Pest](https://pestphp.com) 或 [PHPUnit](https://phpunit.de/) 编写的单元测试与功能测试示例。

### `vendor/` 目录

存放 [Composer](https://getcomposer.org) 依赖。请不要将该目录提交到版本控制。

## `app/` 目录详解

`app` 目录下的大多数类都可以通过 Artisan 命令生成。
可以运行以下命令查看可用的命令：

```shell theme={null}
php artisan list make
```

<AccordionGroup>
  <Accordion title="Http/ 目录">
    存放控制器、中间件与 Form Request。
    应用中几乎所有的请求处理逻辑都放在这里。
  </Accordion>

  <Accordion title="Models/ 目录">
    存放所有的 [Eloquent 模型](/zh/eloquent)类。
    每张数据库表对应一个「模型」，用来查询和写入数据。
  </Accordion>

  <Accordion title="Providers/ 目录">
    存放应用的所有[服务提供者](/zh/service-providers)。
    服务提供者负责将服务绑定到容器、注册事件等启动应用所需的处理。
  </Accordion>

  <Accordion title="Console/ 目录">
    存放所有自定义 Artisan 命令。
    可以通过 `make:command` 命令生成。
  </Accordion>

  <Accordion title="Exceptions/ 目录">
    存放应用的所有自定义异常。
    可以通过 `make:exception` 命令生成。
  </Accordion>
</AccordionGroup>

## 重要文件

### `.env` 文件

用于管理不同环境下不同的配置值（如数据库连接信息、API 密钥等）。
`config/` 中的配置文件会通过 `env()` 辅助函数引用这些值。

```ini theme={null}
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite
```

### `artisan` 文件

Artisan 命令行工具的入口。
以 `php artisan <命令名>` 的形式运行。

## 下一步

<Card title="路由" icon="route" href="/zh/routing">
  学习如何定义路由，并将 URL 与应用逻辑绑定起来。
</Card>


## Related topics

- [Plugin Directories](/zh/packages/laravel-copilot-sdk/plugin-directories.md)
- [Skills](/zh/packages/laravel-copilot-sdk/skills.md)
- [Vue.js 入门 —— 与 Inertia × Laravel 搭配使用的基础](/zh/blog/vue-introduction.md)
- [React 入门 —— 与 Inertia × Laravel 搭配使用的基础](/zh/blog/react-introduction.md)
- [Svelte 入门 —— 与 Inertia × Laravel 搭配使用的基础](/zh/blog/svelte-introduction.md)
