今天不用上課,所以利用半天時間繼續把第一題解下去,今天主要是解決更新資料的問題,先前在用原生的PHP解題時,我是直接用一個表單POST所有資料到一個專門處理資料更新的API去做多筆資料更新的動作,但是在laravel上,預設是一次只能更新一筆資料,另一個問題是Route的設計會和原本的新增路由衝突到,這兩個問題花了一些時間研究,搞定後,其實後台卜就等於做完了。

先說路由的問題,由於Laravel在一開始設計時就傾向於REST的精神,所以在Route上有提供的PUT/PATCH/Delete的方式,但是目前大多數的瀏灠器只有提供GET和POST的方式,所以如果要在表單上實踐其它的HTTP動作,應該是要以AJAX的方式來實踐,不過,Laravel在這部份有提供了一個欺騙的方式,並且也已經做了路由的對應,因此只要在表單上做一個隱藏欄位,並傳送所要執行的動作名稱,接卜來要設定好動作的的路由,然後對應到Controller的update方法,就可以做資料的更新了;

再來是說更新資料的問題,內建提供的update方法預設是必須帶id的,而且一次只能更新一筆資料,所以我改了原本的方法,把id拿掉,然後在表單上放了一個隱藏的欄位當成id,接下來就是用迴圈去把表單資料一筆一筆做更新;雖然可以完成我預期的大量資料更新的工作,不過在了解了laravel的背後機制後,我認為這樣的做法可能不太有效率,所以之後考慮改用別的做法來實踐,但是做到這裏,我己經掌握laravel一些可以自訂及修改的部份了。

最後我試著撈取資料丟回前端的blade去顯示包括標題圖片,進站人數,頁尾版權宣告這些內容,看起來都運作良好,接下來會再研究一下session,cookie及前端js 的整合,這樣應該拿來解其它題都就沒什麼問題了。

目前的階段在使用Laravel上己經沒有什麼大問題了,不過這類框架在使用上的確和原生PHP的觀念上有很大的不同,比如我現在把後台的所有功能顯示的資料都放在一個Controller中去實踐,包括View的樣版也是一個檔案搞定全部的功能,但這個做法和Laravel強調的MVC是不符合的,實際的做法應該把每個功能都獨立一組MVC出去,這樣才方便日後的維護和分工;BUT,我這樣實驗的目的是考量到如果要拿Laravel來做競賽或檢定時,每一個功能都要MVC的話 ,那光開完相關檔案就要去掉不少時間了,所以這部份只是要驗證說Laravel的彈性可以做到什麼桯度,是否可以依照目的不同,而有相應的調整,後來我也在網路上找到一些文章在討論進階的功能管理方式,可以把MVC的架構再做得更精細,不過這要等日後有機會再研究了。

最後修改日期: 2018-11-06

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。