這兩天雖然累,但還是花了點時間把一些其它的功能試了一下,主要是解決了後台的刪除資料功能,然後也解決了前台的blade include功能,不過這和原生的include並沒有太大差異,只不過解決了這個問題後,我才發現我必須整個解題重做,不然不但無法發揮laravel的特性,反而會讓整個解題的過程和體驗變糟了。

先前我說過blade在處理前端頁面時非常好用,但我錯了,今天在處理不同功能呼叫同一個VIEW時,卡了很久,主因在於我先前的做法還是照著我原生解題的邏輯,所以我把所有view會用到的功能都丟在一個陣列中,然後view會依照我route的設計來顯示需要的內容,因此我的view中使用了switch的方式來判斷要顯示的內容,雖然相比之前的4,500行少了很多,但是這招在後台有用,到了前台就沒用了,我得製作同樣的樣板來搭配前台的不同路由,雖然最終還是做得出來,但是我自己也感覺到這樣的開發方式是有問題的,因此我打算先停手目前的解題,重新做一次題目;先前我是因為對於拆多個檔案的管理方式感到恐懼,所以才會想要儘量把程式碼都集中在一個檔案來處理,不過到了laravel,觀念需要轉一下,所謂檔案就是類別或物件,不再需要像原生開發那樣,擔心檔案一多,連結和導向的管理變得混亂;在laravel中,一個Controller中己經把常用的幾種function都建好,應該專注在單一功能的實踐上就好了,而不需要去擔心檔案的從屬關係,而View則是專注在佈局和內容的呈現上,而不需要擔心這次要顯示的功能是什麼,所以要額外判斷,然後特別去產生不一樣的內容;應該要更大擔的把需要的內容都物件化,讓laravel去管理路由和一些組件關係就好了。

最後在處理Session時,發現laravel的session管理有自己的一套模式,並非是延用PHP原生的管理方式,比如設定檔中有一項設定可以設定要不要在瀏灠器關閉時讓session立刻過期,照題目的要求,這個設定是要打開的,但從這個設定來看,就可以得知和原生的做法不同,原生的Session在關閉瀏灠器後,並不會馬上過期,但是當使用者再連上網站時,PHP會建立一個新的session,這是符合題目要求的,不關閉瀏灠器的狀況下,瀏灠次數不會更新,關閉瀏灠器後再連上才會更新瀏灠次數的要求;但是laravel預設會記住使用者的連線紀錄,所以就算關閉瀏灠器,只要session還沒過期,再次連上網站還是會有效。

另一個問題是我在處理前端時,其實有不少的值是共用的,但是照我原本的寫法,我得在每次要建構View時,都去再撈一次資料,然後再從各個Controller丟去View做顯示,做到這我也自己知道做錯了,這和原生解題時寫一個base.php,然後每個頁面都要先include這個檔案沒什麼兩樣,等於是在瀏灠各頁面時都要去資料庫再撈一次資料一樣的意思,後來終於找到laravel有一個service povider的功能可以使用,白話點說,就是可以利用這個機制來建立整個網站的全域變數,像是標題圖片的位置,瀏灠次數,頁尾版權,前台的選單及校園映象圖片這些在很多畫面會共同用到的資訊,可以建一個全域變數來放著,然後View就可以直接把變數拿來使用,然後各個Controller在建構View時,只要專注在提供自己專有的資料就好了,不需要再去把共同的資料再撈一次。

總結這一周研究Laravel框架的心得就是的確可以在開發上簡化不少工夫,但這過程並不如許多推廣者所說的那樣無痛而美好,就我個人來說,單看網路上的教學都是功能單一的內容,所以看起來好象真的很容易,但是像我這樣拿一個完整的網站範例來練功一下,就會發現還有很多要去了解和深入的地方,再加上整個開發流程和觀念也不同,熟悉機制到觀念轉換,一個月的學習時間應該是跑不了的。

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

留言

撰寫回覆或留言

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