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