Phalcon2014 Startup
description
Transcript of Phalcon2014 Startup
PhalconPHP 進行式
2014 @sdpower
Who am I• SDpower info @ sd.idv.tw
• 10+ year PHP
• http://blog.sd.idv.tw/
• http://www.plurk.com/sdpower
• https://github.com/SDpower
• work on exosite.com Senior PHP Developer
PhalconPHPframework
感謝阿土伯熱心推廣
• https://speakerdeck.com/racklin/phalcon-php-framework-and-phalcon-kernel-introduction-phpconftw2012
• https://speakerdeck.com/racklin/zephir-jian-jie
聊聊 Framework
• 安全 safety
聊聊 Framework
• 安全 safety
• 快速 faster
聊聊 Framework
• 安全 safety
• 快速 faster
• 易用 easy to use
聊聊 Framework
• 安全 safety
• 快速 faster
• 易用 easy to use
• 低耦合 low dependency
聊聊 Framework
• 安全 safety
• 快速 faster
• 易用 easy to use
• 低耦合 low dependency
• 活耀 popular
開始使用 PhalconPHP
安裝請參考官方:
http://docs.phalconphp.com/en/latest/reference/install.html
時下 Framework 都有一些快速工具建置
application那 PhalconPHP 有嗎?
時下 Framework 都有一些快速工具建置起始 project
• Laravel:composer global require “laravel/installer=~1.1" 安裝好之後只要:composer create-project laravel/laravel --prefer-dist即可建立好專案用的目錄。
• FuelPHP: 有 OIL
PhalconPHP 也有!
Phalcon Developer Tools
Phalcon Developer Tools
• 安裝:http://docs.phalconphp.com/en/latest/reference/tools.html
• 建立專案 Creates a project
• 產生 Controllers
• 產生 Models
• Scaffold a CRUD
• Web Interface to Tools
實際執行新增專案
專案架構
• config: 設定檔
• model: 模型
• view: 頁面
• public: 網站 root 部分資源
config/config.php
• Databases 設定
• application 設定
config/loader.php
• Loader 設定
config/services.php
• 各種 Service 設定註冊
• View 設定
• Url 設定
config/services.php
• DB 連線設定註冊
app.php
• / 根目錄所執行項目
• 404 所執行項目
public/index.php
• 讀取設定檔
• 讀取 service
• 讀取 loader
• 產生 \Phalcon\Mvc\Micro
• 讀取 app 設定
• 執行 application
public/index.php
• 讀取設定檔
• 讀取 services
• 讀取 loader
public/index.php
• 產生 \Phalcon\Mvc\Micro
• 讀取 app 設定
• 執行 application
NGINX 設定
• root 為專案的 public 目錄
• rewrite 實際上是依$_GET[“_url”] 值為運行
NGINX 設定
• 127.0.0.1:9055 此處為 PHP-FPM 運行的監聽位置
• fastcgi_param APP_ENV "development";特殊設定稍後說明
恭喜!如果你見到此,表示你已正確執行。
良好的專案環境架構?
Production 所有錯誤與失誤見光死!
• 錯誤不需要給客戶知道。
• 失誤不要給別人看到。
• 良好的設計與處理是開發人員的好眠枕。
Development 所有錯誤與記錄必須明確!
• 方便可視的錯誤追蹤。
• 環境因素也要可以快速檢視。
• 記錄必須最小化,任何小事件皆可記錄。
讓專案自動分辨目前環境
使用 Debug 工具良好的 debug 工具有助於開發,剛好 Phalcon 有內建!
使用之前設定於 NGINX 目的為了可以當環境變數做判斷,
如為 development 自動載入 \Phalcon\Debug() 作為開發用。
剩下 production 將所有 Exception 都不顯示以後另行處。
稍作整合將 Debug 移出 index 改為於 service 方式掛載。
同理如有不同於開發與產品環境,皆可依照不同環境做區別掛載各種 service 。
沒有 Controller ?
你因該不會想這樣用下去 !
快快樂樂建立 Controller !
移除 app.php 的舊項目,加入設定檔項目 controllersDir 並建立好目錄。
加入新設定檔 controller.php ,使用 Phalcon\Mvc\Micro\Collection 作為 app 掛載 controller 。
Loader 註冊加入 controllersDir 目錄。
新增 IndexController ,並且將 index.php 內加入載入。
然後就開開心心使用!?
Controller 的現有問題
• 想像下一下這只是單個Controller ,如果有 20 個以上?
• 如果 end point 也有 20~30個以上如何管理確認?
• 如果加上新舊 Controller 版本不同?!
使用 Annotations
• 可於個別 Controllers 內做管理避免混亂。
• 詳細批配 route rule 可以於開發階段快速辨識。
• 產生文件可以一併產出。
• 版本異動容易變更修改。
• 依照 http://docs.phalconphp.com/en/latest/reference/routing.html#annotations-router 文件指示。
• 於 srvice.php 增加 router 並使用 \Phalcon\Mvc\Router\Annotations 。
• 於 IndexController 加入註解。
什麼!不能用
難道要我去寫 C 嗎 ?
Framework 的易用!不是花俏的套件應用
來來來馬上來整合Annotations !
• $url 為 Phalcon\Mvc\Url
為了取的 BaseUri
• $reader 讀取註釋。• foreach 開始讀取各個
supportHandler 就是個別的 Controller
• 檢查 是否有 RoutePrefix
• 取的單獨的設定如: @Get(“/")
• 取的使用 @Route(“/delete/{id:[0-
9]+}",methods="DELETE"})
• 掛載 $app->mount($collection);
Yes!馬上可用
• 不用找套件!
• 不用擔心整合度不好。
• 當然範例不是完美還有許多可以改進調整地方。
除了速度安全一樣沒被忽視。
快速使用加密解密
• 於 config.php 內加入編碼 key
• 於 servcies.php 設定加密服務
• 於 IndexController 做一段測試
齁齁馬上就有了簡單快速
cookies 因為有安全因素,如何快速使用加速
解密!?
PhalconPHP幫你設想好了
• 於 services.php 加入 cookie
• IndexController 加入一段測試
檢查瀏覽器 Cookies 是安全的加密值
不可逆加密,用於隱私資訊。
• 於 services.php 加入
• IndexController 加入一段密碼驗證測試
執行結果
Cross-Site Request Forgery跨網站的偽造要求
• 只需要在 form 內加入驗證用的 Token
• 並於接收資料 controller內檢查即可。
Volt: Template Engine• 這是我用過最快的 Template Engine又好用。
• 支援 pipe Filters
• 支援Macros
• 支援 繼承 Inheritance! 多重繼承Multiple Inheritance!
• 自動跳脫模式 Autoescape mode
• 自定義的 Functions
• 不夠? 還有自定義的 Extensions
Dependency Injection
• Registering services
Dependency Injection
• Registering services as array syntax
Dependency Injection
• 建立自己的 component .
沒說到的• ORM
• ODM(Object-Document Mapper)
• Events Management
• Assets Management
• Phalcon Incubator https://github.com/phalcon/incubator
• sample code https://github.com/SDpower/phalcon_phpconf
為何我喜歡 PHPIt’s all in the details魔鬼藏在細節裡
歡迎加入!
Thank you!