[經驗]初學Laravel — 一些問題及解決方法

Leo Lin
SparkAmpLab
Published in
5 min readJul 5, 2018

最近使用Laravel架構出一些行政程序的自動化,原本需要多次手動產生文件的繁雜過程,透過架構網站來實現全部在網頁中產生文件閱覽並進行操作,可望大幅減少工作負擔及時間;然而過程中一步一步摸索,遇到了很多問題但是也習得了許多Laravel強大的功能和應用,接下來就簡單描述一下我所遇到的問題以及使用什麼樣的解決方法!

架構問題

首先,最剛開始完成的code就像是大學所寫的網站,雖然功能有了,但是所有的Code都塞在我的xxxx.blade.php(某個應該是view,不該存在多餘的資料庫連接和商業邏輯運算的東西),雖然有Controller,但是他的功能只是從Router接收request之後全部導到view做所有處理,現在回想起來實在是慘不忍睹…(扶額

MVC架構(Model-View-Controller)是Laravel相比於傳統PHP一個很大的賣點,透過Model對資料庫進行操作,Controller進行route的分配及商業邏輯的應用,最後View將處理過後的資料顯示給使用者,這樣的一個過程能夠將整個Service細分成更小更專精的區塊以利日後的開發及維護。(絕對有感!)

因此針對這個部分,除了將所有的邏輯分開,也引進了Entity和Repository來建置Model的部分,讓資料處理更加細分,簡而言之,設計Entity來包裝要使用的資料成一個物件,建置一個介面也就是Repository來對這些Entity物件進行儲存擷取等操作然後跟上層的Service串接,這樣做的好處就是當今天Model的資料儲存生態改變,只需要針對新的儲存生態重新實作Repository跟Entity就好,上層的Service不需要更動,這篇文章解釋得更為清楚生動,而實作方式的部分,這篇文章寫得很淺顯易懂可以參考。

在經過上述的調整,request被route進Controller之後,不再是直接導進View,而是先呼叫了Repository中的Function去對資料庫做索取並將資料整理成想要的樣子之後包成Entity,透過Controller呼叫不同的function索取完資料之後,將這些資料return給View讓使用者過目。這樣子的改動之後,當今天有部分功能出問題之後,能馬上鎖定問題點並進行排除,將功能都切割出來,方便日後的維護,也有個系統能讓後續的開發遵循,讚!

更便利的開發

在View的部分,我原本是用以前html、php相結合的方式實作,後來發現Laravel的blade.php檔案提供了很多自定義的funtion來取代原本的php寫法,當然,也是能在blade.php裡面寫老php,但是使用Laravel提供的更為美觀方便,例如想要開一個Form,你能使用

<form action=”welcome.php” method=”post”>

˙˙˙
</form>

但是也能用他定義的 {{ Form::open() }} …{{ Form::close() }},這樣他在這個Form裡面就會自動幫你生成CSRF Protection的Token,這些他們定義的function在使用上看起來更簡單直覺,可以嘗試看看。另外blade也有自定義一些寫法像是@for可以直接使用for的功能但是不需要包在<?php … ?php>之中,也有@section這種標籤,讓View在功能上更靈活,也是值得注意的一點。

參考連結:Laravel-Forms & HTMLLaravel-Blade Templates

開發上面臨的問題

之後遇到的問題是使用Form傳送的參數過多(>1000),因此使用Cache讓資料能在伺服器端進行儲存擷取,不用浪費多餘的網路資源,運作速度也更快。

而後再對於錯誤管理的部分下功夫,簡單來說就是使用try{}catch(){}以及Exception,而Laravel也有提供logging的函式,讓你輕輕鬆鬆記錄下問題與錯誤:

如果在一開始建project的時候沒有config/logging.php記得自己上網找laravel的default config然後創一個,不然他們會抓不到你所定義並要使用點logging channel。

小總結

這些就是我在開發過程中,面臨到的一些問題,也見識到了Laravel的強大,希望之後能再繼續使用Laravel撰寫更厲害更大的project。 :)

--

--

Leo Lin
SparkAmpLab

A newbie of software engineering who's trying to absorb everything!