> ## 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/` 目錄

存放資料庫的 migration、模型工廠與 seeder。
SQLite 資料庫檔案也可放在此處。

### `public/` 目錄

包含所有應用程式請求的進入點 `index.php`。
圖片、JavaScript、CSS 等資產也放在這裡。

<Warning>
  Web 伺服器的 document root 請指到 Laravel 專案的 `public/` 目錄。
  若把專案根目錄或子目錄直接對外公開，可能導致機密檔案外洩。
</Warning>

### `resources/` 目錄

存放[視圖](/zh-TW/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-TW/eloquent)類別。
    每個資料表都會有對應的「模型」，用於查詢與新增資料。
  </Accordion>

  <Accordion title="Providers/ 目錄">
    存放應用程式所有的[服務提供者](/zh-TW/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-TW/routing">
  學習如何定義路由，並將 URL 與應用程式邏輯串連。
</Card>


## Related topics

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