Skip to content

目錄結構

簡介

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

📌 備註

Laravel 新手?請查看 Laravel Bootcamp 以親身體驗此框架,我們將引導你建立第一個 Laravel 應用程式。

根目錄

app 目錄

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

bootstrap 目錄

bootstrap 目錄包含 app.php 檔案,該檔案用於啟動 (bootstraps) 框架。此目錄還包含一個 cache 目錄,其中包含框架為效能優化而生成的檔案,例如路由和服務快取檔案。

config 目錄

config 目錄,顧名思義,包含你應用程式的所有設定檔。建議閱讀所有這些檔案,熟悉所有可用的選項。

database 目錄

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

public 目錄

public 目錄包含 index.php 檔案,這是所有進入你應用程式的請求的入口點,並配置自動載入。此目錄也存放你的資源 (assets),例如圖片、JavaScript 和 CSS。

resources 目錄

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

routes 目錄

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

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

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

你可以選擇透過 install:apiinstall:broadcasting Artisan 指令,為 API 路由 (api.php) 和廣播頻道 (channels.php) 安裝額外的路由檔案。

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

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

storage 目錄

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

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

tests 目錄

tests 目錄包含你的自動化測試。開箱即用地提供了 PestPHPUnit 單元測試和功能測試範例。每個測試類別都應以 Test 一詞作為後綴。你可以使用 /vendor/bin/pest/vendor/bin/phpunit 指令來執行你的測試。或者,如果你想要更詳細和美觀的測試結果呈現,你可以使用 php artisan test Artisan 指令來執行你的測試。

vendor 目錄

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

App 目錄

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

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

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

📌 備註

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

Broadcasting 目錄

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

Console 目錄

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

Events 目錄

此目錄預設不存在,但會由 event:generatemake:event Artisan 命令為您創建。Events 目錄包含 事件類別。事件可用來通知應用程式的其他部分已發生特定動作,這提供了極大的靈活性和解耦。

Exceptions 目錄

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

Http 目錄

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

Jobs 目錄

此目錄預設不存在,但若您執行 make:job Artisan 命令則會為您創建。Jobs 目錄包含應用程式中 可佇列的 Job。Job 可由應用程式佇列處理,或在當前請求生命週期內同步運行。在當前請求期間同步運行的 Job 有時被稱為「命令」,因為它們是 命令模式 的一種實作。

Listeners 目錄

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

Mail 目錄

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

Models 目錄

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

Notifications 目錄

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

Policies 目錄

此目錄預設不存在,但若您執行 make:policy Artisan 命令則會為您創建。Policies 目錄包含應用程式的 授權 Policy 類別。Policies 用於判斷使用者是否可以對資源執行特定動作。

Providers 目錄

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

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

Rules 目錄

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