文件夾結構
文件夾結構
Laravel 的文件夾結構
簡介
默認的 Laravel 應用結構旨在為不同大小的應用提供一個很好的起點。當然,您可以隨意組織您的應用程序。Laravel 對任何給定類的位置幾乎沒有任何限制,只要它們能被 Composer 自動加載。
為什么沒有模型目錄?
當開始使用 Laravel 時,許多開發(fā)人員都因缺少 models
目錄而感到困惑。然而,缺少這樣的目錄是故意的。我們發(fā)現(xiàn)「模型」含糊不清,因為不同的人對「模型」有不同的理解。一些開發(fā)者把應用的「模型」稱為其所有業(yè)務邏輯的總體,而另一些人將「模型」稱為與關系數(shù)據(jù)庫交互的類。
出于這個原因,我們默認把 Eloquent 的模型放在 app
目錄下,并允許開發(fā)人員將它們放在其他地方。
根目錄
App 目錄
app
目錄包含應用程序的核心代碼。你應用中幾乎所有的類都應該放在這里。稍后我們會更深入地了解這個目錄的細節(jié)。
Bootstrap 目錄
bootstrap
目錄包含引導框架的 app.php
文件。該目錄還包含了一個 cache
目錄, cache
目錄下存放著框架生成的用來提升性能的文件,比如路由和服務緩存文件。
Config 目錄
config
目錄,顧名思義,包含應用程序所有的配置文件。我們鼓勵你通讀這些文件,以便幫助你熟悉所有可用的選項。
Database 目錄
database
目錄包含數(shù)據(jù)填充和遷移文件以及模型工廠類。你還可以把它作為 SQLite 數(shù)據(jù)庫存放目錄。
Public 目錄
public
目錄包含了入口文件 index.php
,它是進入應用程序的所有請求的入口點。此目錄還包含了一些你的資源文件(如圖片、JavaScript 和 CSS)。
Resources 目錄
resources
目錄包含了視圖和未編譯的資源文件(如 LESS、SASS 或 JavaScript)。此目錄還包含你所有的語言文件。
Routes 目錄
routes
目錄包含了應用的所有路由定義,Laravel 默認包含了幾個路由文件:web.php
、api.php
、 console.php
和 channels.php
。
web.php
文件包含 RouteServiceProvider
放置在 web
中間件組中的路由,它提供會話狀態(tài)、CSRF 防護和 cookie 加密。如果你的應用不提供無狀態(tài)的、RESTful 風格的 API,則所有的路由都應該在 web.php
文件中定義。.
api.php
文件包含 RouteServiceProvider
放置在 api
中間件組中的路由,它提供了頻率限制。這些路由都是無狀態(tài)的,所以通過這些路由進入應用請求旨在通過令牌進行身份認證,并且不能訪問會話狀態(tài)。
console.php
文件是定義所有基于控制臺命令閉包函數(shù)的地方。每個閉包函數(shù)都被綁定到一個命令實例并且允許和命令行 IO 方法進行簡單的交互。盡管這些文件沒有定義 HTTP 路由,但它也將基于控制臺的入口點(路由)定義到應用程序中。
channels.php
用來注冊你的應用支持的所有的事件廣播渠道的地方。
Storage 目錄
storage
目錄包含編譯后的 Blade 模板、session 會話生成的文件、緩存文件以及框架生成的其他文件。這個目錄被細分成 app
、 framework
和 logs
三個子目錄。app
目錄可以用來存儲應用生成的任何文件。 framework
目錄用來存儲框架生成的文件和緩存。最后, logs
目錄包含應用的日志文件。
storage/app/public
可以用來存儲用戶生成的文件,比如需要公開訪問的用戶頭像。你應該創(chuàng)建一個 public/storage
的軟鏈接指向這個目錄。你可以直接通過 php artisan storage:link
命令來創(chuàng)建此鏈接。
Tests 目錄
tests
目錄包含自動化測試文件。在 PHPUnit 有現(xiàn)成的范例供你參考。每個測試類都應該以 Test
作為后綴。你可以使用 phpunit
或者 php vendor/bin/phpunit
命令來運行測試。
Vendor 目錄
vendor
目錄包含你所有的 Composer 依賴包。
App 目錄
你的大部分的應用程序都位于 app
目錄中。默認情況下,此目錄的命名空間為 App
,并通過 Composer 使用 PSR-4 自動加載標準 自動加載。
app
目錄包含額外的各種目錄,比如:Console
,Http
和 Providers
。將 Console
和 Http
目錄視為向應用程序的核心提供 API。HTTP 協(xié)議和 CLI 都是與應用程序交互的機制,但實際上并不包含應用程序邏輯。換句話說,它們是向你的應用程序發(fā)出命令的兩種方式。Console
目錄包含所有的 Artisan 命令,而 Http
目錄包含你的控制器,中間件和請求。
當你使用 make
Artisan 命令生成類時,將在 app
目錄下生成各種其它目錄。因此,例如,app/Jobs
目錄直到你執(zhí)行 make:job
Artisan 命令去生成一個作業(yè)類之前將不存在
{tip} 許多類通過 Artisan 命令生成在
app
目錄中。為了查看可用的命令,在你的終端運行php artisan list make
命令。
Broadcasting 目錄
Broadcasting
目錄包含應用程序的所有廣播通道類。這些類使用 make:channel
命令生成。此目錄默認時不存在的,但是當你創(chuàng)建第一個通道時它將被創(chuàng)建。要了解更多的關于頻道的信息,查看有關文檔 事件廣播。
Console 目錄
Console
目錄包含應用程序的所有自定義 Artisan 命令。這些命令可以使用 make:command
命令生成。此目錄也安置了控制臺內核,在其中你可以注冊自定義的 Artisan 命令,并定義 計劃任務。
Events 目錄
默認情況下這個目錄是不存在的,但你可以通過 event:generate
和 make:event
Artisan 命令去創(chuàng)建。Events
目錄安置 事件類。事件可用于警告應用程序的其它部分發(fā)生了一個給定的操作,提供了極大的靈活性和解耦。
Exceptions 目錄
Exceptions
目錄包含應用程序的異常處理,并且也是一個放置應用程序拋出任何異常的好地方。如果你想自定義異常的記錄和渲染方式,你應該修改此目錄中的 Handler
類。
Http 目錄
Http
目錄包含你的控制器,中間件和表單請求。處理進入應用程序請求的所有邏輯幾乎都放置在此目錄。
Jobs 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行 make:job
Artisan 命令時,它將被創(chuàng)建出來。Jobs
目錄安置應用程序的 可排隊作業(yè)。Jobs 可由應用程序排對作業(yè),也可以在當前請求的生命周期內同步運行。在當前請求期間同步運行的 Jobs 有時會稱為『命令』,因為它們是 命令模式 的一個實現(xiàn)。
Listeners 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行了 event:generate
或者 make:listener
Artisan 命令時,它將會被創(chuàng)建出來。Listeners
目錄包含 事件 的處理類。事件偵聽器接收一個事件實例并執(zhí)行邏輯以響應被觸發(fā)的事件。例如,一個 UserRegistered
事件可能被 SendWelcomeEmail
偵聽器處理。
Mail 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行 make:mail
Artisan 命令,它將被創(chuàng)建出來。Mail
目錄包含應用程序發(fā)送郵件的所有類。郵件對象允許你去構建一個封裝所有邏輯的郵件類,這個簡單類中可以使用 Mail::send
方法發(fā)送郵件。
Notifications 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行 make:notification
Artisan 命令,它將被創(chuàng)建出來。Notifications
目錄包含應用程序的發(fā)送的所有『事務』通知,比如關于應用程序中發(fā)生的事件的簡單通知。Laravel 的通知功能抽象了通過各種驅動(如:電子郵件,Slack,SMS 或者存儲在數(shù)據(jù)庫中)去發(fā)送通知。
Policies 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行 make:policy
Artisan 命令,它將被創(chuàng)建出來。Policies
目錄包含應用程序的授權策略類。策略用于確定一個用戶是否對一個資源能否執(zhí)行一個給定的操作。有關更多信息,查看 授權文檔。
Providers 目錄
Providers
目錄包含應用程序的所有 服務提供者。服務提供者通過在服務容器中綁定服務引導應用程序,注冊事件或者準備為應用程序即將到來的請求執(zhí)行其它任何任務。
在一個新的 Laravel 應用中,此目錄已經(jīng)包含一些提供者。你可以根據(jù)需要隨意將你自己的提供者添加到此目錄中。
Rules 目錄
默認情況下這個目錄是不存在的,但如果你執(zhí)行 make:rule
Artisan 命令,它將被創(chuàng)建出來。Rules
目錄包含應用程序的自定義驗證規(guī)則對象。規(guī)則用于將復雜的驗證邏輯封裝在一個簡單對象中。關于更多信息,查看 驗證文檔。