目錄結構
簡介
Laravel 預設的應用結構旨在為大型和小型應用程式提供一個良好的起點。當然,你可以隨心所欲地組織你的應用程式。只要 Composer 能自動載入類,Laravel 對任何類存放的位置幾乎沒有任何限制。
根目錄
應用目錄 (The App Directory)
app 目錄包含了應用程式的核心程式碼。我們很快會詳細探討該目錄;不過,應用程式中幾乎所有的類都將位於此目錄下。
Bootstrap 目錄
bootstrap 目錄包含了用於引導框架的 app.php 檔案。該目錄還包含一個 cache 目錄,用於存放框架生成的效能最佳化檔案,例如路由和服務的快取檔案。
Config 目錄
顧名思義,config 目錄包含了應用程式所有的配置檔案。建議你仔細閱讀這些檔案,熟悉所有可用的配置選項。
Database 目錄
database 目錄包含了資料庫遷移、模型工廠和資料填充檔案。如果需要,你也可以使用該目錄來存放 SQLite 資料庫檔案。
Public 目錄
public 目錄包含了 index.php 檔案,這是所有進入應用程式的請求的入口點,並負責配置自動載入。該目錄還存放你的資原始檔,如圖片、JavaScript 和 CSS。
Resources 目錄
resources 目錄包含了你的 檢視 以及未經編譯的原始資原始檔,例如 CSS 或 JavaScript。
Routes 目錄
routes 目錄包含了應用程式所有的路由定義。預設情況下,Laravel 包含兩個路由檔案:web.php 和 console.php。
web.php 檔案包含 Laravel 放置在 web 中介軟體組中的路由,該組提供了會話狀態、CSRF 保護和 Cookie 加密。如果你的應用程式不提供無狀態的 RESTful API,那麼你所有的路由很可能都會定義在 web.php 檔案中。
console.php 檔案用於定義所有基於閉包的控制檯命令。每個閉包都繫結到一個命令例項,從而提供了一種與每個命令的 IO 方法進行互動的簡單方式。儘管此檔案不定義 HTTP 路由,但它定義了進入應用程式的基於控制檯的入口點(路由)。你也可以在 console.php 檔案中 排程 任務。
你可以選擇透過 install:api 和 install:broadcasting Artisan 命令來安裝額外的路由檔案,用於處理 API 路由 (api.php) 和廣播頻道 (channels.php)。
api.php 檔案包含旨在保持無狀態的路由,因此透過這些路由進入應用程式的請求應 透過令牌 (via tokens) 進行身份驗證,並且無法訪問會話狀態。
channels.php 檔案用於註冊應用程式支援的所有 事件廣播 頻道。
Storage 目錄
storage 目錄包含日誌、編譯後的 Blade 模板、基於檔案的會話、檔案快取以及其他由框架生成的檔案。該目錄被劃分為 app、framework 和 logs 目錄。app 目錄可用於儲存應用程式生成的任何檔案。framework 目錄用於儲存框架生成的檔案和快取。最後,logs 目錄包含應用程式的日誌檔案。
storage/app/public 目錄可用於儲存使用者生成的需要公開訪問的檔案,例如使用者頭像。你應該在 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 依賴包。
應用目錄 (The App Directory)
你的應用程式主體程式碼存放在 app 目錄中。預設情況下,該目錄的名稱空間為 App,並由 Composer 使用 PSR-4 自動載入標準 進行自動載入。
預設情況下,app 目錄包含 Http、Models 和 Providers 目錄。然而,隨著時間的推移,當你使用 make Artisan 命令生成類時,app 目錄內會生成其他各種目錄。例如,app/Console 目錄在你執行 make:command Artisan 命令生成命令類之前是不存在的。
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::send 方法進行傳送。
Models 目錄
Models 目錄包含所有的 Eloquent 模型類。Laravel 內建的 Eloquent ORM 提供了一種優雅、簡潔的 ActiveRecord 實現,用於操作資料庫。每個資料庫表都有一個對應的“模型”,用於與該表進行互動。模型允許你查詢表中的資料,以及向表中插入新記錄。
Notifications 目錄
該目錄預設不存在,但如果你執行 make:notification Artisan 命令,它會為你建立。Notifications 目錄包含應用程式傳送的所有“事務性” 通知,例如關於應用程式內發生的事件的簡單通知。Laravel 的通知功能抽象了透過各種驅動程式(如電子郵件、Slack、簡訊或儲存在資料庫中)傳送通知的能力。
Policies 目錄
該目錄預設不存在,但如果你執行 make:policy Artisan 命令,它會為你建立。Policies 目錄包含應用程式的 授權策略類。策略用於確定使用者是否有權對資源執行特定操作。
Providers 目錄
Providers 目錄包含應用程式所有的 服務提供者。服務提供者透過在服務容器中繫結服務、註冊事件或執行任何其他任務來引導你的應用程式,為處理傳入的請求做好準備。
在全新的 Laravel 應用程式中,該目錄已經包含了 AppServiceProvider。你可以根據需要自由新增自己的提供者到此目錄。
Rules 目錄
該目錄預設不存在,但如果你執行 make:rule Artisan 命令,它會為你建立。Rules 目錄包含應用程式的自定義驗證規則物件。規則用於將複雜的驗證邏輯封裝在一個簡單的物件中。更多資訊,請檢視 驗證文件。