Models 目錄在哪裏?php
許多初學者可能都會困惑 Laravel 爲何沒有提供 models
目錄,官方解釋說是由於不一樣人對 models
這個詞的含義見解不一樣,容易形成歧義,有些開發者認爲應用的模型指的是業務邏輯,另一些人則認爲模型指的是與關聯數據庫的交互。正是由於這個緣由,官方默認將 Eloquent 的模型直接放置到 app
目錄下,讓開發者自行選擇模型放置的位置。html
這是 Laravel 框架做者的想法,不過對於國內開發者,尤爲是 PHP 開發者來講,models
目錄用於存放與數據庫交互的模型類應該沒有什麼異議,而業務邏輯應該放到 services
這種目錄之下。因此推薦你們在生成模型類的時候指定生成到 app/Models
目錄下:前端
php artisan make:model Models/Test
根目錄laravel
App目錄web
app
目錄包含了應用的核心代碼,注意不是框架的核心代碼,框架的核心代碼在 /vendor/laravel/framework
裏面,此外你爲應用編寫的代碼絕大多數也會放到這裏,固然,若是你基於 Composer 作了 PHP 組件化開發的話,這裏面存放的恐怕也只有一些入口性的代碼了;數據庫
Bootstrap目錄bootstrap
bootstrap
目錄包含了少量文件,用於框架的啓動和自動載入配置,還有一個 cache
文件夾,裏面包含了框架爲提高性能所生成的文件,如路由和服務緩存文件;api
Config目錄緩存
config
目錄包含了應用全部的配置文件,建議通讀一遍這些配置文件以便熟悉 Laravel 全部默認配置項;安全
Database目錄
database
目錄包含了數據庫遷移文件及填充文件,若是有使用 SQLite 的話,你還能夠將其做爲 SQLite 數據庫存放目錄;
Public目錄
public
目錄包含了應用入口文件 index.php
和前端資源文件(圖片、JavaScript、CSS等),該目錄也是 Apache 或 Nginx 等 Web 服務器所指向的應用根目錄,這樣作的好處是隔離了應用核心文件直接暴露於 Web 根目錄之下,若是權限系統沒作好或服務器配置有漏洞的話,極可能致使應用敏感文件被黑客竊取,進而對網站安全形成威脅;
Resources目錄
resources
目錄包含了應用視圖文件和未編譯的原生前端資源文件(LESS、SASS、JavaScript),以及本地化語言文件;
Routes目錄
routes
目錄包含了應用定義的全部路由。Laravel 默認提供了四個路由文件用於給不一樣的入口使用:web.php
、api.php
、 console.php
和 channels.php
。
web.php
文件包含的路由都位於 RouteServiceProvider
所定義的 web
中間件組約束以內,於是支持 Session、CSRF 保護以及 Cookie 加密功能,若是應用無需提供無狀態的、RESTful 風格的 API,那麼路由基本上都要定義在 web.php
文件中。
api.php
文件包含的路由位於 api
中間件組約束以內,支持頻率限制功能,這些路由是無狀態的,因此請求經過這些路由進入應用須要經過 token 進行認證而且不能訪問 Session 狀態。
console.php
文件用於定義全部基於閉包的控制檯命令,每一個閉包都被綁定到一個控制檯命令而且容許與命令行 IO 方法進行交互,儘管這個文件並不定義 HTTP 路由,可是它定義了基於控制檯的應用入口(路由)。
channels
文件用於註冊應用支持的全部事件廣播頻道。
Storage目錄
storage
目錄包含了編譯後的 Blade 模板、基於文件的 Session、文件緩存,以及其它由框架生成的文件,該目錄被細分爲成 app
、framework
和 logs
子目錄,app
目錄用於存放應用生成的文件,framework
目錄用於存放框架生成的文件和緩存,最後,logs
目錄存放的是應用的日誌文件。
storage/app/public
目錄用於存儲用戶生成的文件,好比能夠被公開訪問的用戶頭像,要達到被 Web 用戶訪問的目的,你還須要在 public
(應用根目錄下的 public
目錄)目錄下生成一個軟鏈接 storage
指向這個目錄。你能夠經過 php artisan storage:link
命令生成這個軟連接。
Tests目錄
tests
目錄包含自動化測試文件,其中默認已經提供了一個開箱即用的PHPUnit 示例;每個測試類都要以 Test
開頭,你能夠經過 phpunit
或 php vendor/bin/phpunit
命令來運行測試。
Vendor目錄
vendor
目錄包含了應用全部經過 Composer 加載的依賴。
應用的核心代碼位於 app
目錄下,默認狀況下,該目錄位於命名空間 App
下, 而且被 Composer 經過 PSR-4 自動載入標準 自動加載。
app
目錄下包含多個子目錄,如 Console
、Http
、Providers
等。Console
和 Http
目錄提供了進入應用核心的 API,HTTP 協議和 CLI 是和應用進行交互的兩種機制,但實際上並不包含應用邏輯。換句話說,它們只是兩個嚮應用發送命令的方式。Console
目錄包含了全部開發者編寫的 Artisan 命令,Http
目錄包含了控制器、中間件和請求等。
其餘目錄會在你經過 Artisan 命令 make
生成相應類的時候自動生成到 app
目錄下。例如,app/Jobs
目錄直到你執行 make:job
命令生成任務類時纔會出如今 app
目錄下。
注:
app
目錄中的不少類均可以經過 Artisan 命令生成,要查看全部有效的命令,能夠在終端中運行php artisan list make
命令。
Console目錄
Console
目錄包含應用全部自定義的 Artisan 命令,這些命令類可使用 make:command
命令生成。該目錄下還有 Console/Kernel
類,在這裏能夠註冊自定義的 Artisan 命令以及定義調度任務。
Events目錄
這個目錄默認不存在,可是能夠經過 event:generate
和 make:event
命令建立。該目錄用於存放事件類。事件類用於告知應用其餘部分某個事件發生狀況並提供靈活的、解耦的處理機制。
Exceptions目錄
Exceptions
目錄包含應用的異常處理器,同時仍是處理應用拋出的任何異常的好地方。
Http目錄
Http
目錄包含了控制器、中間件以及表單請求等,幾乎全部經過 Web 進入應用的請求處理都在這裏進行。
Jobs目錄
該目錄默認不存在,能夠經過執行 make:job
命令生成,Jobs
目錄用於存放隊列任務,應用中的任務能夠被推送到隊列,也能夠在當前請求生命週期內同步執行。同步執行的任務有時也被看做命令,由於它們實現了命令模式。
Listeners目錄
這個目錄默認不存在,能夠經過執行 event:generate
和 make:listener
命令建立。Listeners
目錄包含處理事件的類(事件監聽器),事件監聽器接收一個事件並提供對該事件發生後的響應邏輯,例如,UserRegistered
事件能夠被 SendWelcomeEmail
監聽器處理。
Mail目錄
這個目錄默認不存在,可是能夠經過執行 make:mail
命令生成,Mail
目錄包含應用全部郵件相關類,郵件對象容許你在一個地方封裝構建郵件所需的全部業務邏輯,而後使用 Mail::send
方法發送郵件。
Notifications目錄
這個目錄默認不存在,你能夠經過執行 make:notification
命令連帶建立, Notifications
目錄包含應用發送的全部通知,好比事件發生通知。Laravel 的通知功能將通知發送和通知驅動解耦,你能夠經過郵件,也能夠經過Slack、短信或者數據庫發送通知。
Policies目錄
這個目錄默認不存在,你能夠經過執行 make:policy
命令生成策略類來建立, Policies
目錄包含了應用全部的受權策略類,策略用於判斷某個用戶是否有權限去訪問指定資源。更多詳情,請查看受權文檔。
Providers目錄
Providers
目錄包含應用的全部服務提供者。服務提供者在應用啓動過程當中綁定服務到容器、註冊事件以及執行其餘任務爲即將到來的請求處理作好準備工做。
在新安裝的 Laravel 應用中,該目錄已經包含了一些服務提供者,你能夠按需添加本身的服務提供者到該目錄。
Rules目錄
該目錄默認不存在,可是會伴隨你執行 Artisan 命令 make:rule
自動生成。Rules
目錄包含應用的自定義驗證規則對象,這些規則用於在單個對象中封裝複雜的驗證邏輯,想要了解更多的話,請參考驗證文檔。