#phalcon-進階篇2(攔截器)#php
本教程基於phalcon2.0.9版本git
##前言## 先在這裏感謝各位phalcon技術愛好者,咱們提供這樣一個優秀的交流平臺api
哈嘍你們好啊!今天咱們繼續來講攔截器,攔截器在phalcon的文檔裏面稱之爲驗證,可是我更喜歡叫作攔截器,攔截起主要是起到對於參數作驗證的功能,若是你沒有按照約定的規則來請求就報錯,能夠見得攔截器在請求中擔當一個比較重要的地位,phalcon的攔截器能給咱們帶來什麼新的驚喜呢?讓咱們來一探究竟把框架
注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術post
附上:ui
喵了個咪的博客:http://w-blog.cn.net
教程代碼庫:http://git.oschina.net/wenzhenxi/Phalcon-tutorialcode
phalcon官網地址:https://phalconphp.comblog
phalcon中文社區:http://www.iphalcon.cn/繼承
##1. 攔截器對比##
買個關子,爲何一開始來不直接說是怎麼實現呢?咱們先來看看另外兩個框架的攔截器分別是api開發框架phalapi和go框架beego
phalapi
'login' => array( 'username' => array('name' => 'username', 'require' => true), 'password' => array('name' => 'password', 'require' => true, 'min' => 6), ),
beego
u := User{"man", 40} valid := validation.Validation{} valid.Required(u.Name, "name") valid.MaxSize(u.Name, 15, "nameMax") valid.Range(u.Age, 0, 18, "age") if valid.HasErrors() { for _, err := range valid.Errors { log.Println(err.Key, err.Message) } }
phalcon
$validation = new Validation(); $validation->add('name',new PresenceOf(array('message' => 'The name is required'))); $validation->add('email',new PresenceOf(array('message' => 'The e-mail is required'))); $validation->add('email',new Email(array('message' => 'The e-mail is not valid'))); $messages = $validation->validate($_POST); if (count($messages)) { foreach ($messages as $message) { echo $message, '<br>'; } }
你們對比一下這三個框架的驗證機制能夠看出些什麼,phalapi是一體式框架把後面的參數驗證封裝了,看看beego和phalcon是否是很像他們都是組件式框架,若是你們喜歡也能夠本身封裝成phalapi同樣簡單
##2. phalcon攔截器##
回到今天正題咱們來說講phalcon的攔截器的使用,這裏我創建了一個ValidationController代碼以下:
use Phalcon\Validation; use Phalcon\Validation\Validator\Email; use Phalcon\Validation\Validator\PresenceOf; //初始化攔截器 $validation = new Validation(); //定製你的攔截器規則,你須要驗證的參數名好比:name,若是驗證失敗返回的message $validation->add( 'name', new PresenceOf(array( 'message' => 'The name is required' )))->add( 'email', new PresenceOf(array( 'message' => 'The e-mail is required' )))->add( 'email', new Email(array( 'message' => 'The e-mail is not valid' ))); //能夠先過濾和清理請求參數 $validation->setFilters('name', 'trim'); $validation->setFilters('email', 'trim'); //注入參數能夠放get能夠放post能夠限制數據源 $messages = $validation->validate($_REQUEST); //判斷有沒有驗證經過 if (count($messages)) { //若是經過打印報錯信息 foreach ($messages as $message) { echo $message, '<br>'; } //結束執行後面的內容再也不執行 return; }
咱們試着訪問一下http://phalcon.w-blog.cn/phalcon/Validation應爲咱們什麼都沒有會獲得以下返回:
若是咱們帶上請求參數http://phalcon.w-blog.cn/phalcon/Validation?name=fsfa&email=591235675@qq.com這個時候請求是成功的
##3. 小結##
今天的內容就到這裏了,你們有沒有學到phalcon的攔截器呢,phalcon的攔截器還能夠本身繼承重寫封裝等等功能具體能夠參考文檔,這裏只是簡單說明一下,代碼都會上傳喜歡的話能夠關注個人博客哦!
注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!
Phalcon技術交流:364520707 PhalCon中文社區:287484785 歡迎你們的加入!