Upload
shengyou-fan
View
1.149
Download
8
Embed Size (px)
Citation preview
給你一個使用 Laravel 的理由shengyou @ PHP 也有 Day (2014.07.03)
本日主題• PHP 近期現況、更新進展• PHP 框架綜覽及框架選擇決策• 選擇 Laravel 的原因• 10 個步驟簡介 Laravel 開發流程• Laravel 學習、開發資源• Q&A 交流
范聖佑@shengyou
https://www.facebook.com/shengyoufan
得寬科技 研究員Laravel 台灣 版主laravel-dojo 作者
壞好•易於安裝、佈署、學習•使用者眾、套件多
•函式太多、語法不一致•效能不彰
• PHP 5.3• Namespaces• Closures
• PHP 5.4• Square bracket array syntax• Built-in web server• Traits
• PHP 5.5• Generators
• PHP 5.6• PHPNG
新‧PHP
跟上時代潮流• 為什麼 PHP 不再是個爛東西?
• Grant Lovell
• 如何成為更好的 PHP 開發者?• 大澤木小鐵
框架綜覽
框架選擇決策• 官方有大神領頭開發
- 開發方向跟著大環境趨勢- 定期更新、安全性升級- 官方背後有商業公司支援
• 傳教士多
• 社群大、生態系完整
選用 Laravel 的原因• 作者定期發佈新版
• 簡單、清楚、自我表達的框架元件
• 官方文件齊、相關學習資源完整
• 傳教士、社群大
• 套件多、生態系完整
Laravel Framework• 由 Taylor Otwell 主導開發,目前 4.2 版:
- 參考 Ruby on Rials、ASP.NET MVC 及
Sinatra 的語法和架構,且大量使用
Symfony 元件
• 核心理念:
- 簡單優美的語法,讓開發者愉快的 PHP
框架!
十個步驟了解 Laravel
1.Installation
2.Artisan
3.Configuration
4.Migration
5.Model
6.Seeding
7.Route
8.View
9.Controller
10.Packages
開發環境需求• PHP (PHP 5.4 與 mcrypt extension)
• Composer
• 網頁伺服器
• 資料庫 (與 Client App)
• 編輯器 / IDE (與版本控制 Client App)
• 瀏覽器★ 參考:http://laravel.com/docs/installation#server-requirements
如何建立開發環境• 使用 all-in-one 套件 (初學者)
• 使用官方 homestead (已熟悉 laravel 者)
• 自建開發環境 (進階者)
1. Installation• 三種方式:
- laravel-installer
- composer
- manual install
★ 參考:http://laravel.com/docs/installation
建立新專案 - installer
http://youtu.be/RPHB1efVC4c
建立新專案 - installer
http://youtu.be/RPHB1efVC4c
建立新專案 - composer
http://youtu.be/qXAGkmyMZQY
建立新專案 - composer
http://youtu.be/qXAGkmyMZQY
2. Artisan• $ php artisan {command}
• Laravel 專屬的指令列工具,協助我們完成日常繁瑣工作事務,如:
- 產生 auto-load、清快取、最佳化
- 產生 migration、控制 queue
- 維護模式★ 參考:http://laravel.com/docs/artisan
3. Configuration• app/config/{config}.php
- app.php (debug mode, service provider...)
- database.php (mysql...)
- mail.php (gmail, mailgun...)
- queue.php (beanstalkd...)
• 伺服器 root 指向 public
★ 參考:http://laravel.com/docs/configuration
開發流程• 不同階段的開發流程
[development]開發用、測試用
[local]本機端開發
[staging]階段性發佈
[production]正式上線
每個開發夥伴本機端獨立開發,開發完成後送回版本控制系統
[version control]原始碼管理
定期從版本控制系統取出後,進行整合、單元等測試
專案階段完成後,進行階段性發佈,給客戶測試、確認
所有階段完成後佈署至正式主機,對外公開使用
Laravel 自動環境偵測• bootstrap/start.php
• ~$ hostname
★ 參考:http://laravel.com/docs/configuration#environment-configuration
載入環境設定• app/config/{environment}/*.php
- Laravel 會自動根據目前的環境,載入對應的設定檔,覆寫預設設定
• .env.{environment}.php
- Laravel 4.1整合 phpenv 套件,直接將環境變數載入後,覆寫預設設定
★ 參考:http://laravel.com/docs/configuration#protecting-sensitive-configuration
Configuration 示範
http://youtu.be/KoDhsHsFyeU
Configuration 示範
http://youtu.be/KoDhsHsFyeU
4. Migration• 多人開發時困擾
- 每人的開發階段不同、 DB 狀態也不同,整合時無法知道差異
- 若直接修改 DB 沒有紀錄也沒辦法回復
• 解決方案:導入 Migration
何謂 Migration?• app/database/migrations/{migration}.php
- 所有對 DB 操作的動作,都撰寫對應的程式碼來完成 (Laravel Schema builder)
- 分成 up/down (前進/後退)
- 每個人拿到更新版本後,透過執行
migrate 就可以有相同的 DB 結構,若有問題也可以 rollback 回之前的狀態
★ 參考:http://laravel.com/docs/migrations
5. Model• app/models/{model}.php
- Laravel 裡操作 DB 的 ORM 是 Eloquent
- 一個 resource 對應到 DB 裡的一個 table
- 一個 model 對應到 table 裡的一個 row
- model 是單數、table 是複數
- 從 Eloquent 取出來的東西是 Collection
6. Seeding• app/database/seeds/{seeder}.php
- 在開發時,往往會需要資料來做顯示、刪除來測試程式,但資料的內容不必是真的,但自己建太累了…
- 透過 Laravel 的 table seeder,可以快速的將假資料倒進資料庫,方便開發
CRUD 這種以資料操作為主的功能★ 參考:http://laravel.com/docs/migrations#database-seeding
Seeding with faker 示範
http://youtu.be/70shV6KOcHM
Seeding with faker 示範
http://youtu.be/70shV6KOcHM
7. Route• app/routes.php
- Route 就是 App 一條一條的門禁規則,規則內指定每一個路由可以接受的動作 (GET、POST) 及需要傳入的參數
- 從上而下逐一比對。符合就會執行、若找不到就會回傳 404 (Not Found)
- 可搭配 group、prefix、namespace、sub-
domain 做彈性設計★ 參考:http://laravel.com/docs/routing
8. View• app/views/{view}.blade.php
- 基於 Response 物件,回傳 HTML 頁面內容,並結合專屬的樣板引擎 Blade,方便動態的產生內容
- Blade 可透過繼承主板、覆寫區塊、擴充元件做彈性組合
★ 參考:http://laravel.com/docs/responses
9. Controller• app/controllers/{controller}.php
- 將複雜的程式操作邏輯,從 Route 搬到
Controller 以 Class 的方式進行分類以利維護
- Controller 本身即 IoC Container,可自動 dependency injection
★ 參考:http://laravel.com/docs/controllers
10. Package• Package 簡單來說就是 Laravel 的擴充程式,透過安裝 Package 就可以直接使用別人寫好的功能,加快開發速度
• 在 3.0 時叫 Bundle,4.0 以後改稱 Package
• 概念同 Symfony 的 Bundle;Rails 的 Gems
何處尋找 packages?• 搜尋引擎:
- Laravel Packages Registry
- Packalyst
• 聽 大神/同事/朋友 的推薦
• 看別人的 Open Source 裡用哪些?
更多清單可參考:http://www.laravel-dojo.com/recommend-packages
如何選擇 package?• 參考 Package 搜尋引擎上的 Downloads、
Trust、Popularity 等數值做參考指標
• 看 Package 的作者是誰?
• 聽別人的推薦、部落格的介紹
• 多試幾個同類型的 Package,找出最順自己手的來用
如何安裝/使用?• 仔細閱讀 README (確認版本、規格)
• 調整 composer.json / composer update
• 設定 ServiceProvider、Alias (視需求)
• Publish 設定 (視需求)
• Migrate DB (視需求)
以 Sentry 2 為例:https://cartalyst.com/manual/sentry#installation
Laravel 學習資源• 官方文件
• 參考書籍
• 論壇
• 電台 (Podcast)
• 影片教學 (Screencast)
Laravel 官方文件• http://laravel.com/docs
- 由官方推出的文件,共分 Guide 及 API
兩種型式,依需求使用
- 推薦使用 Dash 或 devdocs.io 做離線查尋用工具,方便開發使用
Laravel 參考書籍• Laravel: Code Bright
- 由社群知名作者 Dayle Rees 所撰寫的
Laravel 教學書,推薦入門使用
• Laravel: From Apprentice To Artisan
- 由框架作者 Taylor 親自操刀,說明
Laravel 核心原理及擴充技巧,較適合進階的開發者閱讀
更多清單可參考:http://www.laravel-dojo.com/books
Laravel 論壇• Laravel.io (http://laravel.io/forum)
- 由社群自主開發、維運的論壇
- 除了論壇功能外,也提供 Pastebin、IRC
聊天室等功能
- 大神級人物不定時出現!追星好地方!
Laravel 電台• Podcast (http://www.buzzsprout.com/11908)
- 由社群所成立的 Laravel Podcast,不定期發行,目前共有 15 集
- 每一集邀請社群內大神級人物線上聊新聞、開發心得以及…各式八卦,歡迎訂閱練聽力!
更多清單可參考:http://www.laravel-dojo.com/worth-to-subscribe
Laravel 影片教學• laracasts.com
- 由 Jeffrey Way 所創立的 Laravel 線上教學品牌,採訂閱式付費服務
• tutsplus.com
- 知名線上教學網站,部份內容免費;部份進階內容採單買或訂閱式付費
更多清單可參考:http://www.laravel-dojo.com/screencast
Laravel 台灣• 中文化官網 (http://bit.ly/twlaravel)
- 目前提供官方文件翻譯
- 歡迎有志之士 fork 回去協助翻譯工作!
• FB 社團 (http://bit.ly/laraveltwfb)
- 不定期分享 Laravel 新聞、教學、討論
- 歡迎加入社團討論!
Laravel Dojo (道場)• @LaravelDojo (http://bit.ly/laravel-dojo)
- 提供 Laravel 學習資源為主題的教學網站,不定期更新 Laravel 相關內容
- 未來預定結合讀書會活動,鼓勵社群內成員彼此交流、切磋實戰技術
- 歡迎加到定期追蹤清單!
總結• 使用新版本、好框架、新的開發流程及工具,讓你跟著 PHP 一起升級!
• Laravel 的框架特色及開發流程
• Laravel 的學習資源及社群
• 希望這些能說服你使用 Laravel!
還是說服不了你…• 考慮其他的 framework 嗎?這裡還有:
- Symfony (@Ricky Su)
- yii (@KeaNy)
- Phalcon (@Rack Lin)
- 自建 framework (@c9s)
• 歡迎多到 PHP 台灣、PHP 也有 Day 討論
Q & AThanks for listening!
簡報下載• 當日錄影:http://youtu.be/nMDNWXZ65aQ
• 投影片:http://bit.ly/VJJzdB
• 示範影片:http://bit.ly/1mqcEpg
• 示範原始碼:http://bit.ly/1vE8ji2