[ Laravel ] 初心者之路#03 – Laravel專案結構

標籤: , , ,

當大家使用VS Code, Sublime或是Atom開啟Laravel的專案時,會看到Laravel的文件夾、檔案好多好複雜,可能開始覺得頭昏眼花、噁心想吐。別擔心,今天就要來帶大家認識Laravel的目錄結構~

 

***本教學使用的為Laravel 5.5.32***

laravel_directory structure

▲Laravel 目錄結構

 

讓我們先看看在根目錄下的幾個重要檔案

 

.env – 環境設定檔

根據專案開發環境,去給予不同的設定值,其中包含App, Database, Cache, Session, Mail

 

laravel_env

▲.env的內容

 

剛開始在env中會使用到的,主要是下列兩個,APP(專案設定) & DB(資料庫設定)

APP的部分是專案環境的基本設定,這些設定會直接關聯到/config/app.php

 

,包含:

  • APP_NAME – 專案的名稱
  • APP_ENV – 專案開發的環境,local / staging
  • APP_KEY – 用作加密session, password以及其他重要資料,沒有設定的話,這些資料會有安全上的問題喔! 可以在CLI(命令列介面)使用php artisan key:generate隨機生成
  • APP_DEBUG – 提供在瀏覽器中顯示詳細的錯誤訊息來進行debug,true / false
  • APP_LOG_LEVEL – 你要laravel紀錄多詳細的log內容(log會儲存於/storage/logs)

debug / info / notice / warning / error / critical / alert / emergency.

 

DB的部分則是專案資料庫的設定,這些設定會關聯到/config/database.php

 

,包含:

  • DB_CONNECTION – 根據使用的資料庫做設定,可能是MySQL, MongoDB, SQLite, SQL Server…本教學使用MySQL
  • DB_HOST – 資料庫主機的位置,本機預設為0.0.1
  • DB_PORT – 資料庫主機的port,預設為3306
  • DB_DATABASE – 資料庫的名稱
  • DB_USERNAME – 資料庫的帳號
  • DB_PASSWORD – 資料庫的密碼

 

 

composer.json & composer.lock – 相依套件管理

之前的教學已經有提到composer的功用,而composer.json就是去描述你專案的套件相依性(使用哪些套件)

composer.json_usage

當你需要某個套件的時候,你只要在composer.json的require中寫入

“vendor/package": "x.x.x”

 

然後在CLI執行

composer update

 

composer就會去安裝你指定的套件,並且更新composer.lock檔

composer.lock在每次有套件被安裝或更新時,會紀錄安裝套件的版本,並將這些資訊鎖定在這個檔案中

 

 

在繼續介紹各個資料夾用途之前,我先簡單介紹一下MVC架構,會幫助各位等等對於Laravel目錄結構的理解

 

MVC (Model-View-Controller)

MVC是一種軟體架構模式,它將系統劃分成3個部分,Model (模型), View (視圖), Controller(控制器),最常被應用在網站網頁的專案上

  • Model – 負責所有的商業邏輯以及資料處理,擁有對資料的直接存取權。
  • View – 負責介面呈現
  • Controller – 負責接收請求,轉發給Model處理,最後回傳結果。

之所以會如此去設計,是為了可以讓各個部分各司其職(單一職責),大大簡化程式複雜程度,讓程式更容易被維護、擴充,而且可以有效地重複利用。

 

laravel_mvc

▲Laravel MVC的結構

 

當使用者存取以laravel建置的網站時,會發生什麼事情?

使用者送出網站的請求,進入了Router,Router判斷應該給哪一個Controller並轉介過去,而Controller針對使用者的請求跟Model要資料,Model從資料庫取得資料並處理交還給Controller,Controller把資料回傳給View,最後呈現給使用者。(根據使用者的請求,Controller可能不需跟Model要資料)

這樣大家有沒有對於MVC有一點點概念了呢?

(報告沒有!)

……

沒有關西,各位把MVC看過後放在心中,至少別忘記它的存在,讓我們繼續看下去!


 

根目錄下的各個資料夾

  • app

app目錄底下包含了整個網站大多數的核心程式,之後我們所寫的程式大多都會丟進來這個資料夾中,其中包含了Controller以及Model的部分。

 

  • bootstrap

這裡的bootstrap不是網頁前端的那個bootstrap歐XD

這個bootstrap是去進行laravel的初始化,載入相關程式。另外也包含了cache的資料夾,用來提升網站運作的效能。

 

  • config

config中文就是設定,顧名思義,裡面放著各式各樣的設定檔,包含

前面提到的app, database,還有像是session, cache, mail等等的設定。

 

  • database

裡面主要包含3個部分:

Migration – 用於建立資料表,並記錄每一次資料表的更新,讓資料庫也可以進行版本控制。

Seed – 產生假資料,可以呼叫Factory來大量產生

Factory – 負責如何產生假資料的邏輯,然後給Seed使用

 

  • public

就像資料夾的名稱一樣,專門放公開的檔案,包含網站的index文件,還有CSS, JavaScript, Image等等都會放在這裡唷!

 

  • resources

最主要就是包含了View,也就是網頁的前端。其他還有網頁語言檔(你可以輕易的讓網站顯示不一樣的語言!),以及還沒有被編譯的資源(e.g LESS, SASS…)

 

  • routes

就像網路的路由器一樣,裡面有好多路由器,去處理使用者存取網站的要求。最常用到的就是web.php,點開就可以發現有這麼一段程式碼:

Route::get('/', function () {

    return view('welcome');

});

 

這段程式碼代表,當使用者存取網頁根目錄的時候,會回傳welcome這個view

真的嗎?抱著實驗家的精神,我們就來測試看看!

打開/resources/views/welcome.blade.php,改變一下它的文字:

route_test_01

 

用瀏覽器開啟我們的網站 (記得要打開XAMPP Control Panel啟動Apache)

route_test_02

看起來web.php的確讓網站的根目錄導向welcome沒錯呢!

 

  • storage

這個目錄會包含編譯過後的Blade templates(後面會提到), 檔案式的session, cache以及log紀錄等各式各樣laravel自己產生的檔案。

  • tests

tests目錄用來放自動化測試的程式,這個…我們不會用到喔XD

  • vendor

從composer安裝的套件,都會在vendor裡面。同時這個資料夾在版本控制時會被排除,不會一起被同步(檔案太多)。

此時前面提到的composer.json/composer.lock就發揮作用,其他同步專案的人只要下composer update的指令,便會自動安裝專案所需的套件,方便吧!

 

laravel目錄結構要講得清楚實在不容易,打了這麼多我也不敢說我寫清楚了…

如果對於上面有任何不了解的,都可以在下方留言,或是參考官方的文件唷

官方文件: https://laravel.com/docs/5.5/structure

若是我有任何錯誤的地方,也麻煩大神不吝指教,拯救被我荼毒的讀者(?

咱們下次見,掰!



相關文章

初心者之路#10 – Migrations 和 Schema 前言 在前一篇 初心者之路#09 – Database in Laravel我們了解到如何透過Laravel提供的SQL方法以及Model來對資料庫進行存取 現在,我們要來看看該如何建立一個資...
初心者之路#13 – 整合實作 PART 1 前言 在之前的文章 初心者之路#11 – 透過Migration建立Datebase實作中,我們透過migration建立了Database,另外也跟各位介紹過如何操作Database( 初心者之路...
初心者之路#06 – Views, Blade Templates 前言 之前在Laravel專案結構中跟各位介紹過MVC的概念,View就是在MVC中的V,負責的是網站界面的呈現,也是我們所熟知的前端。今天要來跟各位介紹的就是在Laravel中怎麼管理View,以...
初心者之路#08 – Blade 實作補充 前言 上一篇 初心者之路#07 – Blade 實作中,帶各位使用Laravel的Blade Templates實作前端的頁面,不過可能有些人發現有個小小的瑕疵,讓我們來看看這個瑕疵在哪裡 &...