Phalcon2014 Startup

70
PhalconPHP 進進 2014 @sdpower

description

Phalcon2014 Startup for PHPconf Taiwan 2014

Transcript of Phalcon2014 Startup

Page 1: Phalcon2014 Startup

PhalconPHP 進行式

2014 @sdpower

Page 2: Phalcon2014 Startup

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

Page 3: Phalcon2014 Startup

PhalconPHPframework

Page 4: Phalcon2014 Startup

感謝阿土伯熱心推廣

• https://speakerdeck.com/racklin/phalcon-php-framework-and-phalcon-kernel-introduction-phpconftw2012

• https://speakerdeck.com/racklin/zephir-jian-jie

Page 5: Phalcon2014 Startup

聊聊 Framework

• 安全 safety

Page 6: Phalcon2014 Startup

聊聊 Framework

• 安全 safety

• 快速 faster

Page 7: Phalcon2014 Startup

聊聊 Framework

• 安全 safety

• 快速 faster

• 易用 easy to use

Page 8: Phalcon2014 Startup

聊聊 Framework

• 安全 safety

• 快速 faster

• 易用 easy to use

• 低耦合 low dependency

Page 9: Phalcon2014 Startup

聊聊 Framework

• 安全 safety

• 快速 faster

• 易用 easy to use

• 低耦合 low dependency

• 活耀 popular

Page 10: Phalcon2014 Startup

開始使用 PhalconPHP

Page 11: Phalcon2014 Startup

安裝請參考官方:

http://docs.phalconphp.com/en/latest/reference/install.html

Page 12: Phalcon2014 Startup

時下 Framework 都有一些快速工具建置

application那 PhalconPHP 有嗎?

Page 13: Phalcon2014 Startup

時下 Framework 都有一些快速工具建置起始 project

• Laravel:composer global require “laravel/installer=~1.1" 安裝好之後只要:composer create-project laravel/laravel --prefer-dist即可建立好專案用的目錄。

• FuelPHP: 有 OIL

Page 14: Phalcon2014 Startup

PhalconPHP 也有!

Page 15: Phalcon2014 Startup

Phalcon Developer Tools

Page 16: Phalcon2014 Startup

Phalcon Developer Tools

• 安裝:http://docs.phalconphp.com/en/latest/reference/tools.html

• 建立專案 Creates a project

• 產生 Controllers

• 產生 Models

• Scaffold a CRUD

• Web Interface to Tools

Page 17: Phalcon2014 Startup

實際執行新增專案

Page 18: Phalcon2014 Startup

專案架構

• config: 設定檔

• model: 模型

• view: 頁面

• public: 網站 root 部分資源

Page 19: Phalcon2014 Startup

config/config.php

• Databases 設定

• application 設定

Page 20: Phalcon2014 Startup

config/loader.php

• Loader 設定

Page 21: Phalcon2014 Startup

config/services.php

• 各種 Service 設定註冊

• View 設定

• Url 設定

Page 22: Phalcon2014 Startup

config/services.php

• DB 連線設定註冊

Page 23: Phalcon2014 Startup

app.php

• / 根目錄所執行項目

• 404 所執行項目

Page 24: Phalcon2014 Startup

public/index.php

• 讀取設定檔

• 讀取 service

• 讀取 loader

• 產生 \Phalcon\Mvc\Micro

• 讀取 app 設定

• 執行 application

Page 25: Phalcon2014 Startup

public/index.php

• 讀取設定檔

• 讀取 services

• 讀取 loader

Page 26: Phalcon2014 Startup

public/index.php

• 產生 \Phalcon\Mvc\Micro

• 讀取 app 設定

• 執行 application

Page 27: Phalcon2014 Startup

NGINX 設定

• root 為專案的 public 目錄

• rewrite 實際上是依$_GET[“_url”] 值為運行

Page 28: Phalcon2014 Startup

NGINX 設定

• 127.0.0.1:9055 此處為 PHP-FPM 運行的監聽位置

• fastcgi_param APP_ENV "development";特殊設定稍後說明

Page 29: Phalcon2014 Startup

恭喜!如果你見到此,表示你已正確執行。

Page 30: Phalcon2014 Startup

良好的專案環境架構?

Page 31: Phalcon2014 Startup

Production 所有錯誤與失誤見光死!

• 錯誤不需要給客戶知道。

• 失誤不要給別人看到。

• 良好的設計與處理是開發人員的好眠枕。

Page 32: Phalcon2014 Startup

Development 所有錯誤與記錄必須明確!

• 方便可視的錯誤追蹤。

• 環境因素也要可以快速檢視。

• 記錄必須最小化,任何小事件皆可記錄。

Page 33: Phalcon2014 Startup

讓專案自動分辨目前環境

Page 34: Phalcon2014 Startup

使用 Debug 工具良好的 debug 工具有助於開發,剛好 Phalcon 有內建!

Page 35: Phalcon2014 Startup

使用之前設定於 NGINX 目的為了可以當環境變數做判斷,

如為 development 自動載入 \Phalcon\Debug() 作為開發用。

Page 36: Phalcon2014 Startup

剩下 production 將所有 Exception 都不顯示以後另行處。

Page 37: Phalcon2014 Startup

稍作整合將 Debug 移出 index 改為於 service 方式掛載。

同理如有不同於開發與產品環境,皆可依照不同環境做區別掛載各種 service 。

Page 38: Phalcon2014 Startup

沒有 Controller ?

Page 39: Phalcon2014 Startup

你因該不會想這樣用下去 !

快快樂樂建立 Controller !

Page 40: Phalcon2014 Startup

移除 app.php 的舊項目,加入設定檔項目 controllersDir 並建立好目錄。

Page 41: Phalcon2014 Startup

加入新設定檔 controller.php ,使用 Phalcon\Mvc\Micro\Collection 作為 app 掛載 controller 。

Loader 註冊加入 controllersDir 目錄。

Page 42: Phalcon2014 Startup

新增 IndexController ,並且將 index.php 內加入載入。

Page 43: Phalcon2014 Startup

然後就開開心心使用!?

Page 44: Phalcon2014 Startup

Controller 的現有問題

• 想像下一下這只是單個Controller ,如果有 20 個以上?

• 如果 end point 也有 20~30個以上如何管理確認?

• 如果加上新舊 Controller 版本不同?!

Page 45: Phalcon2014 Startup

使用 Annotations

• 可於個別 Controllers 內做管理避免混亂。

• 詳細批配 route rule 可以於開發階段快速辨識。

• 產生文件可以一併產出。

• 版本異動容易變更修改。

Page 46: Phalcon2014 Startup

• 依照 http://docs.phalconphp.com/en/latest/reference/routing.html#annotations-router 文件指示。

• 於 srvice.php 增加 router 並使用 \Phalcon\Mvc\Router\Annotations 。

• 於 IndexController 加入註解。

Page 47: Phalcon2014 Startup

什麼!不能用

Page 48: Phalcon2014 Startup

難道要我去寫 C 嗎 ?

Page 49: Phalcon2014 Startup

Framework 的易用!不是花俏的套件應用

Page 50: Phalcon2014 Startup

來來來馬上來整合Annotations !

Page 51: Phalcon2014 Startup

• $url 為 Phalcon\Mvc\Url

為了取的 BaseUri

• $reader 讀取註釋。• foreach 開始讀取各個

supportHandler 就是個別的 Controller

• 檢查 是否有 RoutePrefix

Page 52: Phalcon2014 Startup

• 取的單獨的設定如: @Get(“/")

• 取的使用 @Route(“/delete/{id:[0-

9]+}",methods="DELETE"})

• 掛載 $app->mount($collection);

Page 53: Phalcon2014 Startup

Yes!馬上可用

• 不用找套件!

• 不用擔心整合度不好。

• 當然範例不是完美還有許多可以改進調整地方。

Page 54: Phalcon2014 Startup

除了速度安全一樣沒被忽視。

Page 55: Phalcon2014 Startup

快速使用加密解密

• 於 config.php 內加入編碼 key

• 於 servcies.php 設定加密服務

• 於 IndexController 做一段測試

Page 56: Phalcon2014 Startup

齁齁馬上就有了簡單快速

Page 57: Phalcon2014 Startup

cookies 因為有安全因素,如何快速使用加速

解密!?

Page 58: Phalcon2014 Startup

PhalconPHP幫你設想好了

• 於 services.php 加入 cookie

• IndexController 加入一段測試

Page 59: Phalcon2014 Startup

檢查瀏覽器 Cookies 是安全的加密值

Page 60: Phalcon2014 Startup

不可逆加密,用於隱私資訊。

• 於 services.php 加入

• IndexController 加入一段密碼驗證測試

Page 61: Phalcon2014 Startup

執行結果

Page 62: Phalcon2014 Startup

Cross-Site Request Forgery跨網站的偽造要求

• 只需要在 form 內加入驗證用的 Token

• 並於接收資料 controller內檢查即可。

Page 63: Phalcon2014 Startup

Volt: Template Engine• 這是我用過最快的 Template Engine又好用。

• 支援 pipe Filters

• 支援Macros

• 支援 繼承 Inheritance! 多重繼承Multiple Inheritance!

• 自動跳脫模式 Autoescape mode

• 自定義的 Functions

• 不夠? 還有自定義的 Extensions

Page 64: Phalcon2014 Startup

Dependency Injection

• Registering services

Page 65: Phalcon2014 Startup

Dependency Injection

• Registering services as array syntax

Page 66: Phalcon2014 Startup

Dependency Injection

• 建立自己的 component .

Page 67: Phalcon2014 Startup

沒說到的• ORM

• ODM(Object-Document Mapper)

• Events Management

• Assets Management

• Phalcon Incubator https://github.com/phalcon/incubator

• sample code https://github.com/SDpower/phalcon_phpconf

Page 68: Phalcon2014 Startup

為何我喜歡 PHPIt’s all in the details魔鬼藏在細節裡

Page 69: Phalcon2014 Startup

歡迎加入!

Page 70: Phalcon2014 Startup

Thank you!