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