Markdown

[亂寫時間] 五月份工作心得

看看上一篇GOOGLE書籤列就可以知道五月真是戰況慘烈,

第一周,基本上就是架開發環境,主要使用centOS + windows7 + ssh + xshell。
架完了之後開始把鳥哥的指定章節讀完,過得還算輕鬆寫意。

第二周,架設 LEMP stack 環境 ,也就是 linux nginx mysql php ,
架好了之後要學會用 DNS 把windows 下的 host name
導入到 VM 下 nginx 的 host,方便debug。

第一個小目標是做一個留言板,不使用框架由 PHP + MYSQL 完成。
過程中會學到資料庫的操作,PHP的一些語法,
以及為了符合PSR規範,修改了 vim 的設定裝了一些 cs-fix 或改寫tab空白等等。
最後為了提交到review用的repo學習使用git,也設定了一些alias方便操作。
更改一些配置讓terminal 閱讀體驗更佳。

第三周,做完留言板之後開始看doctrine,看著看著越來越覺得光看範例很難掌握,
所幸搭配著symfony一起學 ,從範例的建立product開始。
原本這邊的目標應該是要先用doctrine把第二周的留言板改成用doctrine操作,
不過光看doctrine的文件一時之間難以了解,也不知道從何開始改寫,
這邊遇到個困難是,我沒接觸過資料庫,PHP也不太熟,我讀完文件之後,
只知道doctrine大概是幹嘛的,ORM又是甚麼...但卻對怎麼使用在我的留言版中沒有概念,
整個進度超級卡的...
後來看見stackoverflow上有人推薦從symfony下手,因為symgony官方的教學也有doctrine,
看起來省略了很多複雜的設定,只做簡單的應用說明,
雖然看完也還不是很瞭,但至少在照做一遍之後,就可以動手開始改寫自己的留言板了!
再寫的過程中一職出錯查資料,漸漸地也釐清entity controller route view 的關係,
以及如何操作entity 還有規劃一系列的 get set function ,
還有在controller 中 透過entity manager操作管理 entity,
在這個時候我只會response 結果 ,並且沒有從前端傳參數,單純直接餵值,
後面拿出紙筆規劃前端與router 的關係 ,學習使用twig ,
覺得紙跟筆真的是王道,就把entity中的get setfunction 與controller 中各種 ActionFunction
做一次了解 ,在重新認識的過程中更加了解他們的關係了,
後來全部改寫成 render 到前端的方式 , 搭配了formBuilder 。

完成了之後主管表示希望
1.加上更新日期
2.使用時區抓時間
3.改成每頁顯示五筆
4.修改一些命名

首先加上更新日期這點,一開始覺得很簡單就直接模仿publishedAt再重做一次,
不過出了許多問題,例如更新與創立時間會一直相同,再來就是更新單筆資料,
所有資料都被同步更新,後來解決的方法又是拿出紙筆,
先思考到底get set 在publishedAt 產生的過程中扮演甚麼樣的腳色,以及在寫入建立時間的過程是怎麼一回事,過程中也明白了__construct的作用(讓set方法 取得dateTime 這類的預設常數)
publishedAt 只在createAction 時做 set ,之後只做get 所以時間永遠是固定的,
updatedAt 在createAction 時一樣要做 set,之後每次在editAction中都要重新set 。
最後解決了,問題其實滿簡單的只是從來沒遇過,也根本沒想過原理,憑感覺亂做當然容易GG。
每頁顯示五筆的部分主要是有三個部分資料庫操作,前端設計分頁,controller的設計。
資料庫操作的部分看了DQL,也看了query builder 加上參考sql 語法,搞了半天總算搞出來
,中間查資料看別人的範例或文件才明白分頁的設計與查詢原理,limit offset firstresult maxresult 之間的關西。
搞好查詢後再來頭痛的就是router path的部分了,到底要怎麼設計才可以讓前端的page 正確的傳回來呢,直接在路徑吃參數傳進原本router中又會改變原本router的長相,導致連不上,
想到的方法試到最後大概只剩新建一個page的entity來方便操作,不過想到就頭痛,
後來隔天上班突然想到再把分頁號碼導向新的router
,新的router在redirect到原本的頁面,過程帶上page參數,這樣就等於繞一個小圈來避免直接自己接自己路徑不同的問題,多虧以前寫node 常常用到類似的概念。
最後修改命名提交,不過之後應該還要再寫測試。



留言