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