Laravel 正確的地方寫正確的程式

php artisan 指令有一大堆可以建立的東西,筆記一下並簡單跟大家分享,要寫什麼邏輯應該要寫在什麼地方,已下次我再釐清思緒隨筆寫下來的文字,Victor 日後再找時間值整理。

Model 資料表對應的相關設定

Controller 設定要送給哪一個方法執行

Mail 設定要送的電子郵件,標題、內文、指向哪個模板

Job 收到隊列排隊的項目,拿回來的資料要怎麼處理的邏輯

Service 商業邏輯,協助 Controller,Controller 呼叫這裡的法(須自行新建檔案)

Repository 協助Model,存一些SQL方法給Service 呼叫 (須自行新建檔案)

event 定義這個系統的事件,例如人生中「吃飯前」要洗手,吃飯前就是事件,當這件事情發生以後,可以外加上各種處理。

Notifications 可以設定,這個通知例如「洗手」需要提醒你,可以設定 傳送mail(可以呼叫定義好的Mail 這裡設定通知誰),或寫入資料庫、寄簡訊,各種管道,

migration 程式碼的方式產生資料庫的資料表

factory 撰寫產生資料庫測試的假資料

command 撰寫可以使用 php artisan 自訂的指令,例如需要固定時間執行的程式,就可以把它寫成指令,每天執行,或其他週期時觸發。

test 產生功能測試或單元測試的檔案,這些測試檔案都是用來撰寫測試程式是否正常運作的方法,常與產生假資料的factory 工廠一起使用。

observer 使用model 操作資料庫時,會有各種狀態正在新增、新增完成,每個階段都可以在這個檔案中加上額外的程式,例如觸發某個事件,修改資料表的某個欄位。

seeder 撰寫預設的資料庫資料,例如資料庫內某個資料表必定有台灣的所有縣市資料,可以產生一個對應的seeder寫在裡面,也可已在檔案中撰寫呼叫factory 的程式,填充很多測試的假資料進入。

request 請求時,例如送出一個表單,會有各種欄位,按下確定發送一個請求到伺服器,可以在這邊檢查請求是否符合規定,如果不符合回傳對應訊息,例如:新建動物的請求,可以建立一個StoreAnimalRequet。 更細的rule 在寫在另一篇

resource 請求就會有回應,這就是伺服器處理完的資料,處理完成時要送到客戶端(使用者)時,在做一些格式轉換的處理,並且可以統一輸出,例如動物的個資源,可以建立一個 AnimalResource 經過這個resource 轉換後,單一比動物的資料,可能包含(年齡、性別…)轉換成最後的要顯示的樣子。

Policy 轉門撰寫這個功能有沒有全線做,這裡指的是已具有權限的會員,例如Victor 我已經是某間公司的員工,我有識別證可以感應進入公司,但我有一些區域,不能進去,例如機房、廚房…或是我今天入住的飯店有分樓層管理,我住在6樓 我已經有今天入住的資格,但我的卡片也只能讓我坐電梯到六樓,這種設定就寫在這裡。

middleware 如果你有較大範圍的設定,可以當作過濾所有的請求,也可以撰寫成最後要回傳的訊息,大範圍的加上其他資訊,例如我想要在每一個回傳訊息,加上Victor 設計的API系統資訊。或是在一進入的請求過濾這個請求是不是會員,或是有沒有符合某些條件,例如:是否年買20歲…

listener 這個檔案可能會跟事件搞混、監聽事件因為常常連再一起說,拆開來事件,就像生活中發生的任何事,在中午12點時或鬧鐘響時,可以撰寫對應的動作,例如中午12點這件事件發生,要去吃午餐的程式…那監聽呢?就是剛剛說的不同的事件綁在一起,例如剛剛說12點到吃午餐,綁在一起,也可以在幫重送消息…

exception 可以自訂例外,Laravel 框架原始也有一些自訂的例外ModelNotFoundException 使用Model 的方式去找資料庫的資料,如果沒有找到,送出這個例外,寫程式的人可以對這個例外做攔截,並做相對應的處理,自訂例外可以在裡面撰寫一些log儲存起來,並撰寫要回傳什麼訊息。

component 跟前端View綁在一起,再另外說明

cast 基本上Model 輸出每個欄位都是文字的資料,可以在casts轉換資料的屬性比如說整數int… ,cast 可以自訂自己的轉換方式,並在Model 的cats 屬性設定個類別,因而產生的類別檔案。

以上這些也都只是定義產生出來的檔案都是Class 類別,如果沒有用Laravel 這樣的設計模式也可以參考,簡單把每個職責分得越清楚,維護起來越容易。

如果你是前端看了有一點點霧煞煞,簡單來說可以把它想像成

css 專門寫樣式

js 專門寫互動

但是這是不同程式語言,不過意思差不多或者可以把它想像成較進階的前端工程師會把css分別建立多個scss 專門寫按鈕、layout 、預設的參數… 最後再用工具打包成一個CSS 這樣的道理一樣,整個是伺服器,Laravel 定義了很多PHP 的class 讓你在對應的地方寫對應的程式。


發佈留言