* * * * *
[TOC]
## 簡介
`Laravel`?默認的目錄結構意在為構建不同大小的應用提供一個好的起點,當然,你可以自己按照喜好組織應用目錄結構,`Laravel`?對類在何處被加載沒有任何限制 -- 只要?`Composer`?可以自動載入它們即可。
#### 為什么沒有?`Models`?目錄?
許多初學者都會困惑 Laravel 為什么沒有?`models`?目錄,當然,這是 laravel 故意為之,因為?`models`?這個詞對不同開發者而言有不同的含義,容易造成歧義,有些開發者認為應用的模型指的是業務邏輯,還有些開發者則認為模型指的是與關聯數據庫的交互。
正是因為如此,我們默認將 Eloquent 的模型放置到?`app`?目錄下,從而允許開發者自行選擇放置的位置。
## 根目錄
#### `app`?目錄
`app`?目錄,如你所料,這里面包含應用程序的核心代碼。另外,你為應用編寫的代碼絕大多數也會放到這里, 我們之后將很快對這個目錄的細節進行深入探討。
#### `bootstrap`?目錄
`bootstrap`目錄包含了幾個框架啟動和自動加載設置的文件。`cache`?文件夾用于包含框架為提升性能所生成的文件,如路由和服務緩存文件。
#### `config`?目錄
`config`?目錄,顧名思義,包含所有應用程序的配置文件。通讀這些配置文件可以應對自己對配置修改的需求。
#### `database`?目錄
`database`?目錄包含了數據遷移及填充文件,你還可以將其作為 SQLite 數據庫的存放目錄。
#### `public`?目錄
`public`?目錄包含了 Laravel 的 HTTP 入口文件?`index.php`?和前端資源文件(圖片、JavaScript、CSS等)。
#### `resources`?目錄
`resources`?目錄包含了視圖、原始的資源文件 (LESS、SASS、CoffeeScript) ,以及語言包。
#### `routes`?目錄
`routes`?目錄包含了應用的所有路由定義。Laravel 默認提供了三個路由文件:`web.php`,?`api.php`, 和?`console.php`。
`web.php`?文件里定義的路由都會在?`RouteServiceProvider`?中被指定應用到?`web`?中間件組,具備 Session 、CSRF 防護以及 Cookie 加密功能,如果應用無需提供無狀態的、RESTful 風格的API,所有路由都會定義在?`web.php`文件。
`api.php`?文件里定義的路由都會在?`RouteServiceProvider`?中被指定應用到?`api`?中間件組,具備頻率限制功能,這些路由是無狀態的,所以請求通過這些路由進入應用需要通過 API 令牌進行認證并且不能訪問 Session 狀態。
`console.php`?文件用于定義所有基于閉包的控制臺命令,每個閉包都被綁定到一個控制臺命令并且允許與命令行 IO 方法進行交互,盡管這個文件并不定義 HTTP 路由,但是它定義了基于命令行的應用入口(路由)。
#### `storage`?目錄
`storage`?目錄包含編譯后的 Blade 模板、基于文件的 session、文件緩存和其它框架生成的文件。此文件夾分格成?`app`?、`framework`?,及?`logs`?目錄。`app`?目錄可用于存儲應用程序使用的任何文件。`framework`?目錄被用于保存框架生成的文件及緩存。最后,`logs`?目錄包含了應用程序的日志文件。
`storage/app/public`?可以用來存儲用戶生成的文件,例如頭像文件,這是一個公開的目錄。你還需要在?`public/storage`?目錄下生成一個軟連接指向這個目錄,你可以使用?`php artisan storage:link`?來創建軟鏈接。
#### `tests`?目錄
`tests`?目錄包含自動化測試。Laravel 推薦了一個?[PHPUnit](https://phpunit.de/)?例子。每一個測試類都需要添加?`Test`?前綴,你可以使用?`phpunit`?或者?`php vendor/bin/phpunit`?命令來運行測試。
#### `vendor`?目錄
`vendor`?目錄包含所有?[Composer](https://getcomposer.org/)?依賴。
## `app`?目錄
應用的核心代碼位于?`app`?目錄下,默認情況下,該目錄位于命名空間?`App`?下, 并且被 Composer 通過?[PSR-4](http://www.php-fig.org/psr/psr-4/)?自動載入標準 自動加載。
`app`?目錄下包含多個子目錄,如?`Console`?、`Http`?、`Providers`?等。
其中?`Console`?和?`Http`?目錄為進入應用程序核心提供了一個 API 。HTTP 協議和 CLI 是和應用進行交互的兩種機制,但實際上并不包含應用邏輯。換句話說,它們是兩種簡單地發布命令給應用程序的方法。`Console`?目錄包含你全部的 Artisan 命令,而?`Http`?目錄包含你的控制器、中間件和請求。
其他目錄將會在你通過 Artisan 命令 make 生成相應類的時候生成到?`app`?目錄下。例如,`app/Jobs`?目錄在你執行?`make:job`?命令生成任務類時,才會出現在?`app`?目錄下。
> {tip}?`app`?目錄中的很多類都可以通過 Artisan 命令生成,要查看所有有效的命令,可以在終端中運行?`php artisan list make`?命令。
#### `Console`?目錄
`Console`?目錄包含應用所有自定義的 Artisan 命令,這些命令類可以使用?`make:command`?命令生成。該目錄下還有 Console Kernel 類,在這里可以注冊自定義的 Artisan 命令以及定義[調度任務](任務調度.md)。
#### `Events`?目錄
`Events`?目錄默認不存在,它會在你使用?`event:generate`?或者?`event:make`?命令以后才會生成。如你所料,此目錄是用來放置?[事件類](事件系統.md)?的。事件類用于當指定事件發生時,通知應用程序的其它部分,并提供了很棒的靈活性及解耦。
#### `Exceptions`?目錄
`Exceptions`?目錄包含應用的異常處理,同時還是處理應用拋出的任何異常的好位置。如果你想自定義異常的記錄和渲染,你應該修改此目錄下的 Handler 類。
#### `Http`?目錄
`Http`?目錄包含了控制器、中間件以及表單請求等,幾乎所有進入應用的請求處理都在這里進行。
#### `Jobs`?目錄
`Jobs`?目錄默認不存在,可以通過執行?`make:job`?命令生成,`Jobs`?目錄用于存放?[隊列任務](隊列.md),應用中的任務可以推送到隊列,也可以在當前請求生命周期內同步執行。同步執行的任務有時也被看作命令,因為它們實現了?[命令總線設計模式](https://en.wikipedia.org/wiki/Command_pattern)。
#### `Listeners`?目錄
`Listeners`?目錄默認不存在,可以通過執行?`event:generate`?和?`make:listener`?命令創建。`Listeners`?目錄包含處理?[事件](事件系統.md)?的類(事件監聽器),事件監聽器接收一個事件并提供對該 事件發生后的響應邏輯,例如,`UserRegistered`?事件可以被?`SendWelcomeEmail`?監聽器處理。
#### `Mail`?目錄
`Mail`?目錄默認不存在,但是可以通過執行?`make:mail`?命令生成,`Mail`?目錄包含郵件發送類,郵件對象允許你在一個地方封裝構建郵件所需的所有業務邏輯,然后使用?`Mail::send`?方法發送郵件。
#### `Notifications`?目錄
`Notifications`?目錄默認不存在,你可以通過執行?`make:notification`?命令創建,?`Notifications`?目錄包含應用發送的所有通知,比如事件發生通知。Laravel 的通知功能將通知發送和通知驅動解耦,你可以通過郵件,也可以通過 Slack、短信或者數據庫發送通知。
#### `Policies`?目錄
`Policies`?你可以通過執行 ·make:policy· 命令來創建, ·Policies· 目錄包含了所有的授權策略類,策略用于判斷某個用戶是否有權限去訪問指定資源。更多詳情,請查看?[授權文檔](用戶授權.md)。
#### `Providers`?目錄
`Providers`?目錄包含應用的?[服務提供者](服務提供者.md)?。服務提供者在啟動應用過程中綁定服務到容器、注冊事件,以及執行其他任務,為即將到來的請求處理做準備。
在新安裝的 Laravel 應用中,該目錄已經包含了一些服務提供者,你可以按需添加自己的服務提供者到該目錄。
* * *
- 前言
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 請求周期
- 開發環境部署
- Homestead
- Valet
- 核心概念
- 服務容器
- 服務提供者
- Facades
- Contracts
- HTTP層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Scout 全文搜索
- Socialite 社會化登錄