很多人應該跟我一樣,當開啟Laravel的專案時,只有呆滯:flushed:的眼神看著這些資料夾,下一秒應該就是想放棄了對吧!其實這些資料夾一點都不可怕,只要你懂了,其實下面對你來說輕而易舉而已。
首先我們應該介紹一下框架的MVC架構

  • Model 資料的管理(資料庫的溝通)、演算法邏輯(商業邏輯)、物件結構定義
  • View 處理網頁外觀的物件、呈現給使用者看、操作的介面
  • Controller 傳入的資料該怎麼運作、程式流程的控制、該回傳給使用者什麼資料等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
digraph {
compound=true
rankdir=RL

graph [ fontname="Source Sans Pro", fontsize=20 ];
node [ fontname="Source Sans Pro", fontsize=18];
edge [ fontname="Source Sans Pro", fontsize=12 ];


subgraph core {
a [label="Hackmd-it \ncore"] [shape=box]
}

c -> f [ltail=session lhead=session]
d -> c [ltail=session lhead=session]



subgraph cluster1 {
concentrate=true
a [label="使用者(User)"] [shape=box]
b [label="伺服器(Server)"] [shape=box]
c [label="Model"] [shape=box]
d [label="Controller"] [shape=box]
e [label="View"] [shape=box]
f [label="資料庫(DB)"] [shape=box]

b -> a [dir="both"]
b -> d [dir="both"]
d -> e [dir="both"]
e -> c [dir="both"]
}
}

參考維基百科: https://zh.wikipedia.org/wiki/MVC

Laravel目錄架構

我們前言有介紹到MVC架構,如果在Laravel 目錄下去尋MVC架構,只會尋找到ViewsControllers那Models跑去哪了? 在laravel官網是說
「許多開發人員都對缺少models的目錄感到疑惑,對於models的定義有些模糊,有些開發人員對於model的應用在於商業邏輯上,但有些開發人員對於model僅限於類別方法與資料庫之間的交互運用。」所以才刻意設計的。

  • app
    • Http
      • Controllers
  • resources
    • views

Laravel目錄結構介紹

第一層為紅字的資料夾都算是最主要的,其他沒有標註解釋的,其實還想不到有什麼用途。

  • app 整個專案的程式核心 備註1
    • Console 自行定義artisan指令檔案
    • Exceptions 自行定義錯誤、例外類
    • Http 應用程式的控制器、請求、中介層。
      • Controllers 存放控制器檔案
      • Middleware 存放「中介軟體」檔案
    • Providers 應用的服務提供器
    • user.php Model預設寫在這
  • bootstrap 初始化框架的啟用程式
    • cache 加快框架、路由和服務的啟用速度
  • config 框架與其它服務的設定檔(專案的設定、session、資料庫、快取設定)
    • factories
    • migrations 存放自動生成資料庫與子資料的內容檔案
    • seeds
  • database 資料庫操作、存放SQL、SQLite的資料、資料庫遷移等
  • public 網站唯一的進入點,可以將 CSS、Javascript、.htaccess、index.php、圖片等檔案放在此。 備註2
  • resources 放置套件相關資源
    • js 未編譯的 JavaScript 程式碼
    • lang 多國語系資源目錄,每個子目錄對應到一個語系。
    • sass sass未編譯成css程式碼
    • views 檢視頁面
  • routes 網站路由規則配置
    1. api.php 定義 API 的路由
    2. channels.php
    3. console.php 定義 Artisan 命令
    4. web.php 定義 web 型別的路由
  • storage 存放編譯後的Blade模板、cache、log、session 等
    • app 儲存應用程式使用的任何檔案
      • public 儲存公開的文件等
    • framework 儲存框架生成的檔案及快取
    • logs 日誌檔案
  • tests 存放單元測試、自動化測試
    • Feature
    • Unit
  • vendor Laravel 框架的主程式及相依套件,第三方套件、Composer安裝包也是放在此。

備註1:使用 composer 支援的PSR-4 autoloading standard規範,我們只要設定好一次 Composer的命名空間 Namespace,當日後增加類別的時候,就能非常簡單的自動讀取。但有於Laravel預先給專案目錄資料夾app下會做自動讀取。

備註2:一般MVC框架會以根目錄index.php為網站進入點,但laravel為保護應用不被直接存取,所以建議將網站的根目錄指向public。

結論

或許在上面簡單的介紹與對應可能還無法理解,但接下來實作會依依詳細介紹,會讓各位開發者更清楚知道。

標籤: w3HexSchool PHP Laravel