---
# System prepended metadata

title: Laravel目錄結構
tags: [PHP, ' Backend', ' Laravel']

---

---
tags: PHP, Backend, Laravel
---

# Laravel目錄結構

先來說說各個目錄及資料夾裡面放置檔案，並沒有強制規定

## 根目錄

#### app目錄
app資料夾都是應用程式的核心程式碼，大部分程式碼都放在這。

#### Bootstarp目錄
bootstrap 目錄包含的檔案用來啟動框架和設定自動載入；以及包含一個 cache 資料夾，其中內有框架對效能最佳化所產生的檔案，例如 route 和 services 的快取檔案。

#### Config目錄

config目錄底下包含所有應用程式的配置檔案。

#### Database目錄

裡面放置資料庫遷移檔案以及填充檔案

#### Pulic目錄

public目錄存放著`index.php`，此檔案是應用程式的HTTP請求入口點。還包含了前端資源，如圖片，JavaScript和css

#### Resources目錄

目錄包含要使用的view，原始資源檔(LESS,SASS,CoffeeScript)以及語言檔

#### Routes目錄

這個目錄包含所有路由定義，laravel有預設三個路由檔案，`web.php`，`api.php`，`console.php`。

`web.php`裡面定義的路由都會被`RouteServiceProvider`分配到web的中介層(middleware)，因此會具備Session、CSRF 防護以及 Cookie 加密功能，如果應用程式無需提供無狀態的、RESTful 風格的 API，則所有的路由都會定義在 `web.php` 檔案中。

`api.php` 檔案裡定義的路由都會在 RouteServiceProvider 中被指配到 api 中介層群組，具備頻率限制功能，這些路由是無狀態的，所以經由這些路由進入應用程式需要 token 進行認證，並且不能訪問 Session 狀態。

`console.php` 檔案用於定義所有基於閉包的控制台指令，每個閉包都被繫結到一個控制台指令並且允許與指令列 IO 方法進行互動，儘管這個檔案並不定義 HTTP 路由，但是它定義了基於指令列的應用程式入口（路由）。

#### Storage 目錄
storage 目錄包含編譯後的 Blade 模板、基於檔案的 session、檔案快取和其它框架生成的檔案。底下資料夾分隔成 app、framework，及 logs 目錄。app 目錄可用於儲存應用程式使用的任何檔案。framework 目錄被用於儲存框架生成的檔案及快取。最後，logs 目錄包含了應用程式的日誌檔案。

`storage/app/public` 可以用來存放使用者上傳檔案（例如個人大頭照）。為了能公開訪問，需要建立 `public/storage` 連結（symbolic link），然後指到 `storage/app/public` 這個資料夾，你可以使用 `php artisan storage:link` 來建立連結。


#### Tests 目錄
tests 目錄包含自動化測試的檔案。有預設一個現成的 PHPUnit 範例。每一個測試類都需要新增 Test 字首，你可以使用 phpunit 或者 php vendor/bin/phpunit 指令來執行測試。


#### Vendor 目錄
vendor 目錄包含你的 Composer 依賴模組，套件檔案都放這。

## App 目錄

在 app 目錄中的很多類別都可以透過 Artisan 指令產生，要檢視所有有效的指令，可以在終端機中執行 `php artisan list make` 指令。


#### Console 目錄
Console 目錄包含應用程式所有自定義的 Artisan 指令，這些指令類別可以使用 make:command 指令產生。

#### Events 目錄
Events 目錄預設不存在，會在你使用 event:generate 或 make:event 指令以後才會被建立。此 Events 目錄是用來放置事件類別的。

#### Exceptions 目錄
Exceptions 目錄包含應用程式的異常處理程序，同時也是個處置應用程式丟擲異常的好位置。如果你想自定義異常的記錄和渲染，你應該修改此目錄下的 Handler 類別。


#### Http 目錄
Http 目錄包含了控制器、中介層以及表單請求等，幾乎所有進入應用程式的請求處理都放在這裡。


#### Jobs 目錄
該目錄預設不存在，可以通過執行 make:job 指令建立，Jobs 目錄用於存放佇列任務，應用程式中的任務可以被佇列化，也可以在當前請求生命週期內同步執行。同步執行的任務有時也被看作指令，因為它們實現了命令模式。


#### Listeners 目錄
這個目錄預設不存在，可以通過執行 event:generate 和 make:listener 指令建立。Listeners 目錄包含處理事件的類別（事件監聽器），事件監聽器接收一個事件並提供對該事件發生後的響應邏輯，例如，UserRegistered 事件可以被 SendWelcomeEmail 監聽器處理。


#### Mail 目錄
這個目錄預設不存在，但是可以通過執行 make:mail 指令產生，Mail 目錄包含郵件傳送類別，郵件物件允許你在一個地方封裝構建郵件所需的所有業務邏輯，然後使用 Mail::send 方法傳送郵件。


#### Notifications 目錄
這個目錄預設不存在，可以通過執行 make:notification 指令建立， Notifications 目錄包含應用程式傳送的所有通知。


#### Policies 目錄
這個目錄預設不存在，可以通過執行 make:policy 指令來建立， Policies 目錄包含了所有的授權策略類別，策略用於判斷某個使用者是否有許可權去訪問指定資源。


#### Providers 目錄
Providers 目錄包含應用程式的服務提供者。服務提供者在啟動應用程式過程中繫結服務到容器、註冊事件，以及執行其他任務，為即將到來的請求處理做準備。