目錄結構

簡介

不論專案大小,Laravel 預設的目錄結構都可提供一個不錯的起始點。不過,你也可以隨意調整要如何整理你的專案。Laravel 幾乎不限制 Class 要放在哪裡 —— 只要 Composer 可以自動載入 (Autoload) 該 Class 即可。

根目錄

App 目錄

app 目錄包含了專案的核心程式碼。我們稍後會更詳細瞭解這個資料夾。不過,專案中幾乎所有的類別都會被放在這個目錄中。

Bootstrap 目錄

bootstrap 目錄中包含了啟動框架所需要的 app.php 檔案。這個資料夾中也會有一個 cache 目錄,該目錄中會包含 Laravel 為了最佳化效能而產生的檔案,如路由與服務的快取檔案。通常來說,不應該去修改這個資料夾中的任何檔案。

Config 目錄

config 目錄,如同目錄名字所示,包含了專案的所有設定檔。最好可以閱讀一下這些檔案,並熟悉一下有什麼選項可以設定。

Database 目錄

database 目錄中包含了所有的資料庫遷移檔 (Migration)、Model Factory、以及 Seed。若你想的話,也可以使用這個目錄來存放 SQLite 資料庫。

Public 目錄

public 目錄包含了 index.php 檔案。該檔案是所有請求進入專案時的進入點,也設定了 Autoload。該目錄中也用來放置所有素材,如圖片、JavaScript、與 CSS。

Resources 目錄

resources 目錄中包含了 View 以及原始未編譯的素材,如 CSS 或 JavaScript。該目錄中也儲存了所有的語系檔。

Routes 目錄

routes 目錄包含了專案的所有路由定義。預設情況下,Laravel 包含了幾個路由檔:web.php, api.php, console.php, 與 channels.php

RouteServiceProvider 會將 web.php 中的路由放在 web Middleware 群組中。web Middleware 群組提供了如 Session 狀態、CSRF 保護、以及 Cookie 加密等功能。若你的專案不使用 stateless (無狀態) 的 RESTful API,則一般來說所有的路由都會放在 web.php 檔案中。

RouteServiceProvider 會將 api.php 中的路由放在 api Middleware 群組中。這些路由是給 Stateless 的請求用的,所以通過這些路由進入網站的請求應使用 Token來進行登入認證,且將無法存取 Session 狀態。

console.php 檔案用來定義所有基於閉包的主控台指令。所有的閉包都有繫結一個指令實體,使用這個指令實體就能輕鬆地與各個指令的 IO 方法互動。雖然這個檔案並不是定義 HTTP 路由,不過它定義了以主控台作為進入點進入專案的路由。

channels.php 檔案用來註冊所有專案要使用的事件廣播頻道。

Storage 目錄

storage 目錄包含了日誌檔、編譯過的 Blade 樣板、基於檔案的 Session、檔案快取、以及其他由 Laravel 所產生的檔案。該目錄還進一步地分成 app, framework, 以及 logs 目錄。app 目錄可用來保存所有由網站產生的檔案。framework 目錄用來儲存由 Laravel 產生的檔案與快取檔。最後,logs 目錄包含了專案的所有日誌檔。

storage/app/public 目錄可用來儲存使用者產生的檔案,如個人資料頭像等應可公開存取的檔案。開發人員應建立一個 public/storage 符號連結 (Symbolic Link) 連結到這個目錄。可以使用 php artisan storage:link Artisan 指令來建立這個連結。

Tests 目錄

tests 目錄包含了自動化測試。Laravel 預設包含了範例的 PHPUnit 單元測試與功能測試。每個測試類別都應以 Test 結尾。可以使用 phpunitphp vendor/bin/phpunit 指令來執行測試。或者,若想使用更詳細且好看的測試結果輸出,可以使用 php artisan test Artisan 指令。

Vendor 目錄

vendor 目錄包含了 Composer 相依性套件。

App 目錄

在你的專案中,大多數的程式碼都會放在 app 資料夾中。預設情況下,該資料夾是放在 App Namespace 下的,且會由 Composer 依照 [PSR-4 Autoloading 標準] Autoload。

app 目錄中包含了多個額外的目錄,如 Console, Http, 與 Providers。可以將 ConsoleHttp 目錄想成是用來進入專案核心的 API。HTTP 協定與 CLI 是兩種與專案互動的機制,而這種機制本身則不包含應用上的邏輯。換句話說,你的專案有兩種操作方法。Console 目錄包含了所有 Artisan 指令,而 Http 目錄則包含了 Controller、Middleware、以及 Request。

其他的資料夾則會在使用 make Artisan 指令產生類別時產生在 app 目錄下。舉例來說,執行了 make:job Artisan 指令來產生 Job 類別後,才會產生 app/Jobs 目錄。

lightbulb

app 目錄內的許多類別都可以通過指令來由 Artisan 產生。若要檢視所有可用的指令,請在終端機中執行 php artisan list make 指令。

Broadcasting 目錄

Broadcasting 目錄包含了所有專案使用的廣播頻道類別。這些類別是使用 make:channel 指令產生的。預設情況下不會有這個目錄,不過在你產生第一個頻道後會自動建立。要瞭解更多有關頻道的資訊,請參考有關事件廣播的說明文件。

Console 目錄

Console 目錄包含所有專案使用的自訂 Artisan 指令。這些指令可以通過 make:command 指令來產生。這個資料夾中也包含了主控台核心 (Kernel),主控台核心可用來註冊自訂 Artisan指令,並定義排程任務

Events 目錄

預設情況下不會有這個資料夾,不過在使用 event:generatemake:event Artisan 指令就會幫你建立。Events 目錄內存放了 Event 類別。可使用 Event 來告知專案中的其他部分:「某個動作發生了」;使用 Event 也提供了不錯的延展性與解耦合。

Exceptions 目錄

Exceptions 目錄包含了專案的例外處理常式 (Exception Handler),這個目錄也適合用來放置所有專案中會擲回的例外。若想客製化例外被紀錄在日誌中的方式、或是客製化例外轉譯的方式,可修改該目錄中的 Handler 類別。

Http 目錄

Http 目錄包含了 Controller, Middleware, 以及 Form Request。幾乎所有用來處理請求進入專案的邏輯都會放在這個資料夾內。

Jobs 目錄

預設情況下不會有這個目錄,不會在執行 make:job Artisan 指令後會自動建立。Jobs 目錄用來存放所有專案的可佇列任務。「任務 (Job)」可以由專案放入佇列,或是在目前的請求生命週期中同步執行。在目前請求中同步執行的任務有時候也稱為「指令 (Command)」,因為這種作法是一種命令模式的實作。

Listeners 目錄

預設情況下不會有這個目錄,不過會在執行 event:generatemake:listener Artisan 指令後自動建立。Listeners 目錄中包含了用來處理事件的類別。事件監聽程式 (Event Listener) 會接收事件實體並執行一段邏輯,以回應發出的事件。舉例來說,UserRegistered 事件可能會由一個 SendWelcomeEmail 監聽程式進行處理。

Mail 目錄

預設情況下沒有這個目錄,不過,在執行 make:mail Artisan 指令後會自動建立。Mail 目錄包含了所有代表了 E-Mail 的類別,專案可以寄出這些 E-Mail。使用 Mail 物件就可以將所有建立 E-Mail 的邏輯封裝到單一、簡單的類別,然後用 Mail::send 方法就可以寄出。

Models 目錄

Models 目錄包含了所有的 Eloquent Model 類別。Laravel 中內建的 Eloquent ORM 提供了一個美觀、簡易的 ActiveRecord 實作,可用來操作資料庫。資料庫中每個資料表都有一個對應的「Model」,可用來與這個資料表互動。使用 Model 就可以從資料表中取得資料,以及可將新資料插入到資料表中。

Notifications 目錄

預設情況下沒有這個目錄,不過會在執行 make:notification Artisan 指令後自動建立。Notifications 目錄包含了所有由專案寄出的「交易式 (Transactional)」通知,如:在專案中發生事件的簡易通知。Laravel 的通知功能抽象化了各種不同後端的寄送功能,如:E-Mail、Slack、簡訊、或是儲存在資料庫中。

Policies 目錄

預設情況下不會有這個目錄,不過會在執行 make:policy Artisan 指令後自動建立。Policies 目錄包含了用於專案的授權原則類別。原則 (Policy) 可用來判斷某個使用者是否能對特定資源進行給定的動作。

Providers 目錄

Providers 目錄包含了專案中的所有 Service Providers。Service Provider 會向 Service Container 繫結服務、註冊事件、或是進行其他任何行為來為專案準備連入請求⋯⋯等,以啟動專案。

在全新安裝的 Laravel 專案中,這個目錄內已經包含了數個 Provider。你可以依照需求隨意在這個目錄內新增你自己的 Provider。

Rules 目錄

預設情況下不會有這個目錄,不過在執行 make:rule Artisan 指令後會自動建立。Rules 目錄包含了用於專案的自訂驗證規則。Rule 是用來將複雜的驗證邏輯封裝在一個簡單的物件中的。有關更多資訊,請參考表單驗證說明文件

翻譯進度
100% 已翻譯
更新時間:
2023年2月11日 上午10:28:00 [世界標準時間]
翻譯人員:
  • cornch
幫我們翻譯此頁

留言

尚無留言

“Laravel” is a Trademark of Taylor Otwell.
The source documentation is released under MIT license. See laravel/docs on GitHub for details.
The translated documentations are released under MIT license. See cornch/laravel-docs-l10n on GitHub for details.