Skip to content

目錄結構 ​

介紹 ​

Laravel 預設的應用程式結構旨在為大型和小型應用程式提供一個絕佳的起點。但您可以自由地組織您的應用程式。只要 Composer 能夠自動載入類別,Laravel 對於任何特定類別的位置幾乎沒有限制。

根目錄 ​

app 目錄 ​

app 目錄包含您應用程式的核心程式碼。我們很快會更詳細地探索這個目錄;然而,您應用程式中幾乎所有的類別都將位於這個目錄中。

bootstrap 目錄 ​

bootstrap 目錄包含 app.php 檔案,用於引導 (bootstraps) 框架。這個目錄也包含一個 cache 目錄,其中存放著框架為效能優化而生成的檔案,例如路由和服務快取檔案。

config 目錄 ​

config 目錄,顧名思義,包含您應用程式所有的組態檔案。仔細閱讀這些檔案並熟悉所有可用的選項是個好主意。

database 目錄 ​

database 目錄包含您的資料庫遷移 (migrations)、模型工廠 (model factories) 和資料填充 (seeds)。如果您願意,也可以使用這個目錄來存放 SQLite 資料庫。

public 目錄 ​

public 目錄包含 index.php 檔案,它是所有進入應用程式請求的入口點,並負責組態自動載入。此目錄還存放您的資產 (assets),例如圖片、JavaScript 和 CSS。

resources 目錄 ​

resources 目錄包含您的 視圖 (views) 以及未經編譯的原始資產,例如 CSS 或 JavaScript。

routes 目錄 ​

routes 目錄包含您應用程式所有的路由定義。預設情況下,Laravel 包含兩個路由檔案:web.php 和 console.php。

web.php 檔案包含 Laravel 放置在 web 中介層群組中的路由,該群組提供會話狀態、CSRF 保護和 Cookie 加密。如果您的應用程式不提供無狀態的 RESTful API,那麼您所有的路由很可能都將定義在 web.php 檔案中。

console.php 檔案是您可以定義所有基於閉包 (closure) 的 Artisan 命令的地方。每個閉包都綁定到一個命令實例,允許您以簡單的方法與每個命令的 IO 方法互動。儘管此檔案不定義 HTTP 路由,但它定義了基於命令列 (console based) 的應用程式入口點(路由)。您也可以在 console.php 檔案中排程任務。

此外,您可以透過 install:api 和 install:broadcasting Artisan 命令,安裝用於 API 路由 (api.php) 和廣播頻道 (channels.php) 的額外路由檔案。

api.php 檔案包含的路由旨在為無狀態的,因此透過這些路由進入應用程式的請求預期將透過 Token 進行身份驗證,並且無法存取會話狀態。

channels.php 檔案是您可以註冊應用程式支援的所有事件廣播頻道的地方。

storage 目錄 ​

storage 目錄包含您的日誌、編譯後的 Blade 模板、基於檔案的會話 (sessions)、檔案快取以及框架生成的其他檔案。此目錄分為 app、framework 和 logs 目錄。app 目錄可用於儲存應用程式生成的任何檔案。framework 目錄用於儲存框架生成的檔案和快取。最後,logs 目錄包含您應用程式的日誌檔案。

storage/app/public 目錄可用於儲存使用者生成的檔案,例如個人資料頭像 (profile avatars),這些檔案應該是公開可存取的。您應該在 public/storage 建立一個指向此目錄的符號連結。您可以使用 php artisan storage:link Artisan 命令來建立連結。

tests 目錄 ​

tests 目錄包含您的自動化測試。預設情況下,提供了範例 Pest 或 PHPUnit 單元測試和功能測試。每個測試類別都應該以單字 Test 作為後綴。您可以使用 /vendor/bin/pest 或 /vendor/bin/phpunit 命令執行測試。或者,如果您想要更詳細且美觀的測試結果呈現,您可以使用 php artisan test Artisan 命令執行測試。

vendor 目錄 ​

vendor 目錄包含您的 Composer 依賴項。

App 目錄 ​

應用程式的大部分內容都存放在 app 目錄中。預設情況下,此目錄命名空間為 App,並由 Composer 使用 PSR-4 自動載入標準 進行自動載入。

預設情況下,app 目錄包含 Http、Models 和 Providers 目錄。然而,隨著時間的推移,當您使用 make Artisan 命令生成類別時,app 目錄內將會生成各種其他目錄。例如,app/Console 目錄在您執行 make:command Artisan 命令以生成命令類別之前是不存在的。

Console 和 Http 這兩個目錄將在下面的各自章節中進一步解釋,但您可以將 Console 和 Http 目錄視為提供一個 API 進入應用程式的核心。HTTP 協定和 CLI 都是與應用程式互動的機制,但它們本身並不包含應用程式邏輯。換句話說,它們是向應用程式發出命令的兩種方式。Console 目錄包含所有 Artisan 命令,而 Http 目錄則包含您的控制器、中介層和請求。

📌 備註

app 目錄中的許多類別都可以透過 Artisan 命令生成。要查看可用命令,請在終端機中執行 php artisan list make 命令。

Broadcasting 目錄 ​

Broadcasting 目錄包含應用程式所有廣播頻道類別。這些類別是使用 make:channel 命令生成的。此目錄預設不存在,但在您建立第一個頻道時將為您建立。要了解有關頻道的更多資訊,請查看 事件廣播 文件。

Console 目錄 ​

Console 目錄包含應用程式所有自訂 Artisan 命令。這些命令可以使用 make:command 命令生成。

Events 目錄 ​

此目錄預設不存在,但將由 event:generate 和 make:event Artisan 命令為您建立。Events 目錄存放 事件類別。事件可用於通知應用程式的其他部分已發生某個特定動作,從而提供高度的彈性與解耦。

Exceptions 目錄 ​

Exceptions 目錄包含應用程式所有自訂例外。這些例外可以使用 make:exception 命令生成。

Http 目錄 ​

Http 目錄包含您的控制器、中介層和表單請求。幾乎所有處理進入應用程式請求的邏輯都將放置在此目錄中。

Jobs 目錄 ​

此目錄預設不存在,但如果您執行 make:job Artisan 命令,將會為您建立。Jobs 目錄存放應用程式的 可佇列任務。任務可以由應用程式佇列或在當前請求生命週期內同步執行。在當前請求期間同步執行的任務有時被稱為「命令」,因為它們是 命令模式 的實作。

Listeners 目錄 ​

此目錄預設不存在,但如果您執行 event:generate 或 make:listener Artisan 命令,將會為您建立。Listeners 目錄包含處理您 事件 的類別。事件監聽器會接收一個事件實例,並回應事件被觸發而執行邏輯。例如,UserRegistered 事件可能由 SendWelcomeEmail 監聽器處理。

Mail 目錄 ​

此目錄預設不存在,但如果您執行 make:mail Artisan 命令,將會為您建立。Mail 目錄包含應用程式傳送所有 代表電子郵件的類別。Mail 物件允許您將建構電子郵件的所有邏輯封裝在一個單一、簡單的類別中,該類別可以使用 Mail::send 方法傳送。

Models 目錄 ​

Models 目錄包含所有 Eloquent 模型類別。Laravel 隨附的 Eloquent ORM 提供了優雅、簡單的 ActiveRecord 實作,用於與您的資料庫互動。每個資料庫表格都有一個對應的「Model」,用於與該表格互動。模型允許您查詢表格中的資料,以及插入新記錄。

Notifications 目錄 ​

此目錄預設不存在,但如果您執行 make:notification Artisan 命令,將會為您建立。Notifications 目錄包含應用程式傳送所有「交易性」 通知,例如關於應用程式內發生的事件的簡單通知。Laravel 的通知功能抽象化了透過各種驅動程式(例如電子郵件、Slack、SMS 或儲存在資料庫中)傳送通知。

Policies 目錄 ​

此目錄預設不存在,但如果您執行 make:policy Artisan 命令,將會為您建立。Policies 目錄包含應用程式的 授權策略類別。策略用於確定使用者是否可以對資源執行給定動作。

Providers 目錄 ​

Providers 目錄包含應用程式所有 服務提供者。服務提供者透過在服務容器中綁定服務、註冊事件或執行任何其他任務來引導您的應用程式,以準備處理傳入請求。

在新建立的 Laravel 應用程式中,此目錄將已經包含 AppServiceProvider。您可以根據需要在此目錄中新增自己的提供者。

Rules 目錄 ​

此目錄預設不存在,但如果您執行 make:rule Artisan 命令,將會為您建立。Rules 目錄包含應用程式的自訂驗證規則物件。規則用於將複雜的驗證邏輯封裝在一個簡單的物件中。有關更多資訊,請查看 驗證文件。