More Related Content
Similar to 使用 laravel 的前與後 (20)
More from Shengyou Fan (20)
使用 laravel 的前與後
- 2. 簡報主題
• 透過使用 Laravel Framework 完成同樣的專
題內容,比較使用框架與否的差異:
- 使用 Homestead
- 啟始 Laravel
- 環境變數設定
- Artisan 指令
- 建立 Migration/Seeding
- 設定 Route
- 連結 Controller
- 使用樣板引擎
- 使用 ORM/Model
- 使用 Package
- 4. 什麼是 Homestead?
• 隨著開發工具 趨複雜,為降低建置開發
環境的難度、減少建置時間、並提供完整
工具鏈,Laravel 官方推出名為 Homestead
的虛擬機器方案
• Homestead 2.0 更整合了 Composer,讓
homestead 的使用、操作更加簡便
★ 參考:http://laravel.tw/docs/4.2/homestead
- 6. 有 些好料?
• Ubuntu 14.04
• PHP 5.6 (with mcrypt)
• HHVM
• Nginx
• MySQL
• Postgres
• Node (With Bower,
Grunt, and Gulp)
• Redis
• Memcached
• Beanstalkd
• Laravel Envoy
• HipChat + Slack
- 7. 怎麼使用?
• 安裝Virtual Box
• 安裝Vagrant
• 安裝 composer 套件
• 透過指令 啟動/暫停 homestead
★ 參考:http://mattstauffer.co/blog/introducing-laravel-homestead-2.0
- 13. Before & After
• 團隊成員各出奇
招、自建開發環境
• 署時可能因為環
境差異而造成程式
碼無法運作
• 統一團隊成員的開發
環境的差異
• 開發環境與上線主機
同步,開發時即可預
測程式 署結果
- 20. Before & After
• 手動管理所有原始
碼 案,若在移
動、複製時出錯就
GG
• 引入套件、升級函
式庫費時辛苦
• 使用 Composer 統一
管理所有元件,安
裝、更新都方便
• 框架目錄結構清楚且
依照慣例,即便新成
員也能無接縫使用
- 23. 各開發階段流程
[ development ]
開發用、測試用
[ local ]
本機端開發
[ staging ]
階段性發
[ production ]
正式上線
每個開發夥伴本機端
獨立開發,開發完成
後送回版本控制系統
[version control]
原始碼管理
定期從版本控制系統
取出後,進行整合、
單元等測試
專案階段完成後,進
行階段性發 ,給客
戶測試、確認
所有階段完成後 署
至正式主機,對外公
開使用
- 26. 如何設定環境變數?
• app/config/{environment}/*.php
- Laravel 會自動根據目前的環境,載入對
應的設定 ,覆寫預設設定
• .env.{environment}.php
- Laravel 4.1 開始整合 phpenv 套件,直接
將環境變數載入後,覆寫預設設定
★ 參考:http://laravel.tw/docs/configuration#protecting-sensitive-configuration
★ 參考:http://laravel.tw/docs/4.2/configuration#environment-configuration
- 29. Before & After
• 程式碼 署到不同
主機時,都要手動
修改相關設定值
• 直接將機敏資 寫
在程式碼放到版本
控制裡,有曝露風
險
• 透過環境設定,程式
碼可以自動適應所在
主機的相關設定
• 透過 phpenv 動態載
入,機敏資 不會曝
露在版本控制的原始
碼內
- 33. 如何使用 artisan?
• $ php artisan {command}
• 常用的指令有:
- env、 dump-autoload、optimize
- controller:make、migrate:make
- migrate、db:seed
- 37. 什麼是 Migration?
• 所有對 DB 操作的動作,都 寫對應的程
式碼來完成 (Laravel Schema builder)
• 分成 up / down (前進/後退)
• 每個人拿到更新版本後,透過執行
migrate 就可以有相同的 DB 結構,若有問
題也可以 rollback 回之前的狀態
★ 參考:http://laravel.tw/docs/migrations
- 39. 為什麼要用 M & S?
• 多人開發時,因為新功能而需要修改 DB
結構,若沒有 Migration 則其他人就無法
知道 DB 的差異; 署時,DB 的修改沒
有紀錄、若有狀況也無從回復
• 用 Seeding 後,可以快速的讓 DB 內有測
試資料可以使用,寫 DB 操作時效率大增
- 47. Before & After
• 所有的 DB 操作沒
有紀錄,多人開發
時常常會因為 DB
不同步炸掉
• 開發時,光產生測
試資料就花掉很多
時間
• 所有 DB 修改都有紀
錄,同步方便且可復
原
• 可快速產生假資料,
也可快速清空資料
庫,方便開發寫資料
操作 (CRUD)功能
- 49. 什麼是 Route?
• Route 就是 App 一條一條的門禁規則,規
則內指定每一個路由可以接受的動作
(GET、POST) 及需要傳入的參數
• 從上而下逐一比對。符合就會執行、若找
不到就會回傳 404 (Not Found)
• 可搭配 group、prefix、namespace、sub-
domain 做彈性設計
★ 參考:http://laravel.tw/docs/routing
- 50. 為什麼要用 Route?
• Document Root 指定在 public,透過框架
進入點 (index.php) 統一管理所有路由,增
加程式碼安全性
• 透過 Route 設計,所有 App 可使用的路由
就一目了然,若出錯時也方便除錯
- 53. Before & After
• 所有的頁面都要手
動新增一個 *.php
案
• 每一個 *.php 案
還要針對可接受的
http method 做判斷
• 統一由 Route 管理
App 內所有的路由,
增加開發的效率與應
用程式安全性
- 55. 什麼是 Controller?
• 依照 MVC 原理,處理 Route 送過來的資
料,並依應用程式邏輯操作 Model 改變
存的資料
• 所有應用程式的邏輯由 Controller 統一處
理,Controller 本身依功能命名
★ 參考:http://laravel.tw/docs/controllers
- 60. Before & After
• 程式的操作邏輯總
是寫在 *.php 的開
頭,程式邏輯、DB
操作、資料顯示全
混在一起的「義大
利麵式」寫法
• 程式操作邏輯分門別
類由不同的 Class 處
理,Class 內各
Function 也只專注處
理一個邏輯,在分工
與維護上都更清楚
- 62. 什麼是/為什麼要樣板?
• 一個 MVC 網路應用程式直接跟使用者互
動的部份就是View
• 在實作頁面時,很多頁面的 HTML DOM
其實是重複的,為減少維護多份重複的原
始碼,並讓開發更簡便,我們需要透過樣
板將頁面相同的區塊獨立出來
- 63. Laravel 的樣板引擎
• Laravel 針對寫網路應用程式一定需要的樣
板功能提供了 Blade 個樣板引擎
• 透過 Blade 語法,可以讓頁面有親屬關
係,讓樣板繼承 (template inheritance)變得
簡單,且可將頁面重複的部份拆分成區塊
(section),再引入至頁面對應的位置即可
★ 參考:http://laravel.tw/docs/4.2/templates
- 64. 怎麼用 Blade?
• 所有的 view 都統一放在 views 資料夾底下
• 依照慣例,主樣板會放在 layouts 資料夾
內;子樣板會放在該 resource 資料夾內
• blade 樣板的副 名命名為 *.blade.php
- 70. Before & After
• 不同頁面裡相同的
區塊 能用 include
的方式在不同頁面
引入、彈性較低
• 透過 Blade 很容易的
將網頁拆成主板、子
板及區塊
• 不同區塊經拆解後,
容易重複使用,開發
時 需專注在區塊內
即可
- 72. 什麼是 ORM?
• ORM = Object-relational mapping
• 簡單來說,就是把資料庫裡一筆一筆的資
料變成物件來操作。 些物件透過繼承可
以增加更多的方法,讓資料庫的操作
(CRUD) 更加直覺、方便
- 74. Laravel 的 Eloquent
• Eloquent 是 Laravel 提供的 ORM 工具,依
照以下慣例,讓 DB 操作變得容易:
- 一個 resource 對應到 DB 裡的一個 table
- 一個 model 對應到 table 裡的一個 row
- model 是單數、table 是複數
- 從 Eloquent 取出來的東西是 Collection
- 79. Before & After
• 所有跟資料庫操作
相關的動作都要自
己下 SQL 語法
• 在組合 SQL 語法
時,要小心任何有
安全性疑慮的字串
• 透過 Eloquent,操
作 DB 就像寫敘述
句一樣,資料表間
的關聯也很直覺
• 本身就已針對安全
性做防禦,減少初
學者可能的錯誤
- 81. 什麼是 Package?
• Package 簡單來說就是 Laravel 的擴充程
式,透過安裝 Package 就可以直接使用別
人寫好的功能,加快開發速度
• 在 3.0 時叫 Bundle,4.0 以後改稱 Package
• 概念同 Symfony 的 Bundle;Rails 的 Gems
- 83. 如何選擇 Package?
• 參考 Package 搜尋引擎上的 Downloads、
Trust、Popularity 等數值做參考指標
• 看 Package 的作者是誰?
• 聽別人的推薦、部落格的介紹
• 多試幾個同類型的 Package,找出最順自
己手的來用
- 84. 如何安裝 Package?
• 仔細閱讀 README (確認版本、規格)
• 調整 composer.json / composer update
• 設定 ServiceProvider、Alias (視需求)
• Publish 設定 (視需求)
• Migrate DB (視需求)
★ 以 Sentry 2 為例:https://cartalyst.com/manual/sentry#installation
- 88. Before & After
• 想要使用別人寫好
的函式庫,要手動
下載、安裝、整合
進自己的程式碼
• 透過 Laravel Package
的設定,別人已經寫
好的函式庫可以迅度
的整合到自己的專案
裡,站在巨人的肩膀
上