Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

使用 laravel 的前與後

6.173 Aufrufe

Veröffentlicht am

於 2014/11/27 受邀於 彰化師範大學 資訊工程學系系學會 分享 Laravel Framework,主題分為三段:

1. 選一個框架當好朋友,讓您成為開心攻城獅
2. 使用 Laravel 的前與後
3. 成為全能 PHP 攻城獅

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

使用 laravel 的前與後

  1. 1. 使用 Laravel 的前與後 shengyou @ 彰師大資工系學會(2014.11.27)
  2. 2. 簡報主題 • 透過使用 Laravel Framework 完成同樣的專 題內容,比較使用框架與否的差異: - 使用 Homestead - 啟始 Laravel - 環境變數設定 - Artisan 指令 - 建立 Migration/Seeding - 設定 Route - 連結 Controller - 使用樣板引擎 - 使用 ORM/Model - 使用 Package
  3. 3. 使用 Homestead
  4. 4. 什麼是 Homestead? • 隨著開發工具 趨複雜,為降低建置開發 環境的難度、減少建置時間、並提供完整 工具鏈,Laravel 官方推出名為 Homestead 的虛擬機器方案 • Homestead 2.0 更整合了 Composer,讓 homestead 的使用、操作更加簡便 ★ 參考:http://laravel.tw/docs/4.2/homestead
  5. 5. 為什麼要 Homestead? • 透過使用虛擬機器,可直接在開發機上模 擬上線主機環境,確保程式可 署 • 透過Virtual Box +Vagrant 的組合,讓複雜 的虛擬機器安裝、複製、散 、更新變得 更加容易,而 Laravel 官方透過 個方式 直接提供開發者一整個開發工具包
  6. 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. 7. 怎麼使用? • 安裝Virtual Box • 安裝Vagrant • 安裝 composer 套件 • 透過指令 啟動/暫停 homestead ★ 參考:http://mattstauffer.co/blog/introducing-laravel-homestead-2.0
  8. 8. 簡要示範 安裝 homestead
  9. 9. 簡要示範 啟始 homestead 設定
  10. 10. 簡要示範 設定 Homestead.yaml
  11. 11. 簡要示範 啟動 homesteadVM
  12. 12. 簡要示範 暫停 homesteadVM
  13. 13. Before & After • 團隊成員各出奇 招、自建開發環境 • 署時可能因為環 境差異而造成程式 碼無法運作 • 統一團隊成員的開發 環境的差異 • 開發環境與上線主機 同步,開發時即可預 測程式 署結果
  14. 14. 啟始 Laravel
  15. 15. 如何啟始一個專案? • 使用 Laravel Installer • 使用 Composer ★ 參考:http://laravel.tw/docs/4.2/installation
  16. 16. 簡要示範 使用 Laravel Installer
  17. 17. 簡要示範 使用 Composer - P.1
  18. 18. 簡要示範 使用 Composer - P.2
  19. 19. Laravel 目錄結構 •Document Root 指向 public •vendor 是 Composer 套件 •app 是大多數寫程式的位置
  20. 20. Before & After • 手動管理所有原始 碼 案,若在移 動、複製時出錯就 GG • 引入套件、升級函 式庫費時辛苦 • 使用 Composer 統一 管理所有元件,安 裝、更新都方便 • 框架目錄結構清楚且 依照慣例,即便新成 員也能無接縫使用
  21. 21. 環境變數設定
  22. 22. 什麼是環境設定? • 在開發過程中,程式碼會經過數個不同的 開發階段,每個開發階段都會 署在不同 的機器上。也因此,諸如 DB 連線資 等 變數在不同機器上就會有不同的設定 • 環境變數的設計,就是讓程式碼可以動態 的適應不同機器上的不同設定,減少 署 時需手動調整設定的負擔
  23. 23. 各開發階段流程 [ development ] 開發用、測試用 [ local ] 本機端開發 [ staging ] 階段性發 [ production ] 正式上線 每個開發夥伴本機端 獨立開發,開發完成 後送回版本控制系統 [version control] 原始碼管理 定期從版本控制系統 取出後,進行整合、 單元等測試 專案階段完成後,進 行階段性發 ,給客 戶測試、確認 所有階段完成後 署 至正式主機,對外公 開使用
  24. 24. 為什麼要設定環境? • 以往程式碼 署到不同主機時,就要手動 修改相關的連線資 • Laravel 的環境設定設計,可以讓 Laravel 自動依照不同的主機名稱,自動載入對應 的相關設定,開發者也可自行決定開發階 段的名稱,可搭配自動 署工具,讓 署 工作快速不出錯
  25. 25. Laravel 如何偵測環境? • bootstrap/start.php • ~$ hostname ★ 參考:http://laravel.com/docs/configuration#environment-configuration Laravel 自動環境偵測
  26. 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
  27. 27. 簡要示範 設定 debug mode
  28. 28. 簡要示範 設定 mysql connections
  29. 29. Before & After • 程式碼 署到不同 主機時,都要手動 修改相關設定值 • 直接將機敏資 寫 在程式碼放到版本 控制裡,有曝露風 險 • 透過環境設定,程式 碼可以自動適應所在 主機的相關設定 • 透過 phpenv 動態載 入,機敏資 不會曝 露在版本控制的原始 碼內
  30. 30. Artisan 指令
  31. 31. 什麼是 artisan? • Laravel 專屬的指令列工具,協助我們完成 日常繁瑣工作事務,如: - 產生 auto-load、清快取、最佳化 - 產生 migration、控制 queue - 維護模式
  32. 32. 為什麼要用 artisan? • 自動幫忙產生想要的 物件 鷹架, 可以少 打一些程式碼 • 啟動常用的工具、最佳化 Laravel • 簡單來說,就是因為 懶 我們是高效率的 攻城獅
  33. 33. 如何使用 artisan? • $ php artisan {command} • 常用的指令有: - env、 dump-autoload、optimize - controller:make、migrate:make - migrate、db:seed
  34. 34. 簡要示範 artisan 常用指令示範
  35. 35. Before & After • 所有程式碼維護的 工作都要由自己手 動處理 • 所有關於框架的鎖事 都可以由指令列協助 我們完成
  36. 36. 建立 Migration/Seeding
  37. 37. 什麼是 Migration? • 所有對 DB 操作的動作,都 寫對應的程 式碼來完成 (Laravel Schema builder) • 分成 up / down (前進/後退) • 每個人拿到更新版本後,透過執行 migrate 就可以有相同的 DB 結構,若有問 題也可以 rollback 回之前的狀態 ★ 參考:http://laravel.tw/docs/migrations
  38. 38. 什麼是 Seeding? • 在開發時,往往會需要資料來做顯示、刪 除來測試程式,但資料的內容不必是真 的,但自己建太累了… • 透過 Laravel 的 table seeder,可以快速的 將假資料倒進資料庫,方便開發 CRUD 種以資料操作為主的功能 ★ 參考:http://laravel.tw/docs/migrations#database-seeding
  39. 39. 為什麼要用 M & S? • 多人開發時,因為新功能而需要修改 DB 結構,若沒有 Migration 則其他人就無法 知道 DB 的差異; 署時,DB 的修改沒 有紀錄、若有狀況也無從回復 • 用 Seeding 後,可以快速的讓 DB 內有測 試資料可以使用,寫 DB 操作時效率大增
  40. 40. 怎麼做 Migration? 使用 artisan 產生 migrate
  41. 41. 怎麼做 Migration? 透過 Laravel Shema Builder 操作 DB 變更
  42. 42. 怎麼做 Migration? 透過 artisan 執行 migrate
  43. 43. 怎麼做 Migration? 透過 artisan 執行 migrate
  44. 44. 怎麼做 Seeding? 先寫 Seed Class (產生完 Class 記得 dump-autoload)
  45. 45. 怎麼做 Seeding? 在 DatabaseSeeder 內呼叫要執行的 Seed Class
  46. 46. 怎麼做 Seeding? 使用 artisan 執行 db:seed
  47. 47. Before & After • 所有的 DB 操作沒 有紀錄,多人開發 時常常會因為 DB 不同步炸掉 • 開發時,光產生測 試資料就花掉很多 時間 • 所有 DB 修改都有紀 錄,同步方便且可復 原 • 可快速產生假資料, 也可快速清空資料 庫,方便開發寫資料 操作 (CRUD)功能
  48. 48. 設定 Route
  49. 49. 什麼是 Route? • Route 就是 App 一條一條的門禁規則,規 則內指定每一個路由可以接受的動作 (GET、POST) 及需要傳入的參數 • 從上而下逐一比對。符合就會執行、若找 不到就會回傳 404 (Not Found) • 可搭配 group、prefix、namespace、sub- domain 做彈性設計 ★ 參考:http://laravel.tw/docs/routing
  50. 50. 為什麼要用 Route? • Document Root 指定在 public,透過框架 進入點 (index.php) 統一管理所有路由,增 加程式碼安全性 • 透過 Route 設計,所有 App 可使用的路由 就一目了然,若出錯時也方便除錯
  51. 51. 怎麼設定 Route? app/routes.php
  52. 52. 檢查 Route 設定 用 artisan 指令列出目前的 Route 設定
  53. 53. Before & After • 所有的頁面都要手 動新增一個 *.php 案 • 每一個 *.php 案 還要針對可接受的 http method 做判斷 • 統一由 Route 管理 App 內所有的路由, 增加開發的效率與應 用程式安全性
  54. 54. 連結 Controller
  55. 55. 什麼是 Controller? • 依照 MVC 原理,處理 Route 送過來的資 料,並依應用程式邏輯操作 Model 改變 存的資料 • 所有應用程式的邏輯由 Controller 統一處 理,Controller 本身依功能命名 ★ 參考:http://laravel.tw/docs/controllers
  56. 56. 為什麼用 Controller? • 將應用程式的裡將複雜的程式操作邏輯, 獨立成 Class 以利維護,從 Class、 Function 的命名就可以大致猜出其功能 • Laravel Controller 本身即 IoC Container, 可自動 dependency injection
  57. 57. 怎麼產生 Controller? 使用 artisan 指令產生 Controller Class
  58. 58. 把 Route 導入 app/routes.php
  59. 59. Controller 怎麼寫? 對應 function 名稱內寫操作邏輯
  60. 60. Before & After • 程式的操作邏輯總 是寫在 *.php 的開 頭,程式邏輯、DB 操作、資料顯示全 混在一起的「義大 利麵式」寫法 • 程式操作邏輯分門別 類由不同的 Class 處 理,Class 內各 Function 也只專注處 理一個邏輯,在分工 與維護上都更清楚
  61. 61. 使用樣板引擎
  62. 62. 什麼是/為什麼要樣板? • 一個 MVC 網路應用程式直接跟使用者互 動的部份就是View • 在實作頁面時,很多頁面的 HTML DOM 其實是重複的,為減少維護多份重複的原 始碼,並讓開發更簡便,我們需要透過樣 板將頁面相同的區塊獨立出來
  63. 63. Laravel 的樣板引擎 • Laravel 針對寫網路應用程式一定需要的樣 板功能提供了 Blade 個樣板引擎 • 透過 Blade 語法,可以讓頁面有親屬關 係,讓樣板繼承 (template inheritance)變得 簡單,且可將頁面重複的部份拆分成區塊 (section),再引入至頁面對應的位置即可 ★ 參考:http://laravel.tw/docs/4.2/templates
  64. 64. 怎麼用 Blade? • 所有的 view 都統一放在 views 資料夾底下 • 依照慣例,主樣板會放在 layouts 資料夾 內;子樣板會放在該 resource 資料夾內 • blade 樣板的副 名命名為 *.blade.php
  65. 65. 設定主樣板 先定義一個主樣板的 HTML 頁面框架
  66. 66. 設定主樣板 先定義一個主樣板的 HTML 頁面框架
  67. 67. 設定主樣板 先定義一個主樣板的 HTML 頁面框架
  68. 68. 子樣板繼承主樣板 子樣板繼承主樣板
  69. 69. Controller 回傳View 在 Controller 裡宣告回傳 view 的名稱
  70. 70. Before & After • 不同頁面裡相同的 區塊 能用 include 的方式在不同頁面 引入、彈性較低 • 透過 Blade 很容易的 將網頁拆成主板、子 板及區塊 • 不同區塊經拆解後, 容易重複使用,開發 時 需專注在區塊內 即可
  71. 71. 使用 ORM / Model
  72. 72. 什麼是 ORM? • ORM = Object-relational mapping • 簡單來說,就是把資料庫裡一筆一筆的資 料變成物件來操作。 些物件透過繼承可 以增加更多的方法,讓資料庫的操作 (CRUD) 更加直覺、方便
  73. 73. 為什麼要用 ORM? • 原本在寫資料庫查詢時,往往需要自行依 照需求下 SQL 查詢式,當查詢式變長、 關聯日趨複雜時,很難直覺了解該查詢式 的作用 • 自行處理 SQL 查詢式時,也需確認輸入 的字串是否都有 Escape 以防安全性疑慮
  74. 74. Laravel 的 Eloquent • Eloquent 是 Laravel 提供的 ORM 工具,依 照以下慣例,讓 DB 操作變得容易: - 一個 resource 對應到 DB 裡的一個 table - 一個 model 對應到 table 裡的一個 row - model 是單數、table 是複數 - 從 Eloquent 取出來的東西是 Collection
  75. 75. 怎麼設定 Model? 在 Model 裡設定 DB 名稱 (可依照慣例)
  76. 76. 怎麼設定關聯? 設定關聯 function
  77. 77. 怎麼操作 ORM? 取出前 5 筆文章 (Laravel 支援自動分頁 !)
  78. 78. 在View 裡呈現 在 view 裡將 model 的資料印出來
  79. 79. Before & After • 所有跟資料庫操作 相關的動作都要自 己下 SQL 語法 • 在組合 SQL 語法 時,要小心任何有 安全性疑慮的字串 • 透過 Eloquent,操 作 DB 就像寫敘述 句一樣,資料表間 的關聯也很直覺 • 本身就已針對安全 性做防禦,減少初 學者可能的錯誤
  80. 80. 使用 Package
  81. 81. 什麼是 Package? • Package 簡單來說就是 Laravel 的擴充程 式,透過安裝 Package 就可以直接使用別 人寫好的功能,加快開發速度 • 在 3.0 時叫 Bundle,4.0 以後改稱 Package • 概念同 Symfony 的 Bundle;Rails 的 Gems
  82. 82. 何處尋找 Package? • 搜尋引擎: - Packagist - Packalyst • 聽 大神/同事/朋友 的推薦 • 看別人的 Open Source 裡用 些?
  83. 83. 如何選擇 Package? • 參考 Package 搜尋引擎上的 Downloads、 Trust、Popularity 等數值做參考指標 • 看 Package 的作者是誰? • 聽別人的推薦、部落格的介紹 • 多試幾個同類型的 Package,找出最順自 己手的來用
  84. 84. 如何安裝 Package? • 仔細閱讀 README (確認版本、規格) • 調整 composer.json / composer update • 設定 ServiceProvider、Alias (視需求) • Publish 設定 (視需求) • Migrate DB (視需求) ★ 以 Sentry 2 為例:https://cartalyst.com/manual/sentry#installation
  85. 85. 設定 composer.json 設定 composer.json 內的 package 名稱
  86. 86. 更新套件 使用 composer update 指令
  87. 87. 設定 Service Provider 依套件指示設定 Service Provider
  88. 88. Before & After • 想要使用別人寫好 的函式庫,要手動 下載、安裝、整合 進自己的程式碼 • 透過 Laravel Package 的設定,別人已經寫 好的函式庫可以迅度 的整合到自己的專案 裡,站在巨人的肩膀 上
  89. 89. 小結 • 透過把相同專案用 Laravel 再實作一次做 為前、後比較,讓我們了解使用框架後在 開發上帶來的好處與便利性 • 希望 樣能說服你嘗試 Laravel!
  90. 90. Q & A Thanks for listening!

×