默認(rèn)的 Laravel 應(yīng)用程序結(jié)構(gòu)是為了提供一個(gè)良好的開始,無論是構(gòu)建大型還是小型應(yīng)用。當(dāng)然,你可以依照喜好自由地組織應(yīng)用程序。Laravel 幾乎沒有強(qiáng)加限制任何類的放置位置 - 只要 Composer 可以自動(dòng)加載這些類即可。
一個(gè)新安裝的 Laravel 根目錄包含許多個(gè)目錄:
app
目錄,如你所料,包含應(yīng)用程序的核心代碼。我們之后將會(huì)很快深入探討這個(gè)目錄的細(xì)節(jié)。
bootstrap
目錄包含幾個(gè)框架啟動(dòng)跟自動(dòng)加載配置的文件。
config
目錄,顧名思義,包含所有應(yīng)用程序的配置文件。
database
目錄包含你的數(shù)據(jù)庫遷移與數(shù)據(jù)填充文件。
public
目錄包含前面的控制器和你的資源文件 (圖片、JavaScript、CSS,等等)。
resources
目錄包含你的視圖、原始的資源文件 (LESS、SASS、CoffeeScript) 和「語言」文件。
storage
目錄包含編譯后的 Blade 模板、基于文件的 session、文件緩存和其他框架產(chǎn)生的文件。
tests
目錄包含你的自動(dòng)化測試。
vendor
目錄包含你的 Composer 依賴模塊。
應(yīng)用程序的「內(nèi)容」存在于 app
目錄中。默認(rèn)情況下,這個(gè)目錄在 App
命名空間下并通過 Composer 使用 PSR-4 自動(dòng)加載標(biāo)準(zhǔn) 自動(dòng)加載。 你可以使用 app:name
Artisan 命令變更這個(gè)命名空間.
app
目錄附帶許多個(gè)額外的目錄,例如:Console
、Http
和 Providers
。考慮 Console
和 Http
目錄用作提供 API 進(jìn)入應(yīng)用程序的「核心」。HTTP 協(xié)定和 CLI 都是跟應(yīng)用程序交互的機(jī)制,但實(shí)際上并不包含應(yīng)用程序邏輯。換句話說,它們是兩種簡單地發(fā)布命令給應(yīng)用程序的方法。Console
目錄包含你全部的 Artisan 命令,而 Http
目錄包含你的控制器、過濾器和請(qǐng)求。
Commands
目錄當(dāng)然是用來放置應(yīng)用程序的命令。命令代表可以被應(yīng)用程序放到隊(duì)列的任務(wù),以及可以在當(dāng)前請(qǐng)求生命周期內(nèi)同步運(yùn)行的任務(wù)。
Events
目錄,如你所料,是用來放置事件類。當(dāng)然,使用類來代表事件不是必須的;然而,如果你選擇使用它們,這個(gè)目錄將會(huì)是通過 Artisan 命令行創(chuàng)建它們時(shí)的默認(rèn)位置。
Handlers
目錄包含命令和事件的處理類。處理進(jìn)程接收命令或事件,并針對(duì)該命令或事件執(zhí)行邏輯。
Services
目錄包含各種「輔助」服務(wù),囊括應(yīng)用程序需要的功能。例如,Laravel 引入的
Registrar
服務(wù)負(fù)責(zé)驗(yàn)證 并創(chuàng)建應(yīng)用程序的新用戶。其他的例子可能是服務(wù)跟外部 API、評(píng)價(jià)系統(tǒng)或甚至是跟從你的應(yīng)用程序匯集數(shù)據(jù)的服務(wù)交互。
Exceptions
目錄包含應(yīng)用程序的異常處理進(jìn)程,也是個(gè)處置應(yīng)用程序拋出的任何異常的好地方。
注意: 在 app 目錄中的許多類可以用 Artisan 命令產(chǎn)生。要查看可以使用的命令,在終端機(jī)執(zhí)行 php artisan list make 命令。
如前面所提到的,默認(rèn)的應(yīng)用程序命名空間為 App
;然而,你可以變更這個(gè)命名空間成跟應(yīng)用程序的名稱一樣,這可以簡單地通過 app:name
Artisan 命令完成。例如:如果你的應(yīng)用程序叫做「SocialNet」,你將會(huì)執(zhí)行下面的命令:
php artisan app:name SocialNet