1. 程式人生 > 其它 >phalcon-進階篇2(攔截器)

phalcon-進階篇2(攔截器)

#phalcon-進階篇2(攔截器)#

本教程基於phalcon2.0.9版本

##前言## 先在這裡感謝各位phalcon技術愛好者,我們提供這樣一個優秀的交流平臺

哈嘍大家好啊!今天我們繼續來說攔截器,攔截器在phalcon的文件裡面稱之為驗證,但是我更喜歡叫做攔截器,攔截起主要是起到對於引數做驗證的功能,如果你沒有按照約定的規則來請求就報錯,可以見得攔截器在請求中擔當一個比較重要的地位,phalcon的攔截器能給我們帶來什麼新的驚喜呢?讓我們來一探究竟把

注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術

附上:

喵了個咪的部落格:http://w-blog.cn

教程程式碼庫:

http://git.oschina.net/wenzhenxi/Phalcon-tutorial

phalcon官網地址:https://phalconphp.com

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 PhalconValidation;
use PhalconValidationValidatorEmail;
use PhalconValidationValidatorPresenceOf;

//初始化攔截器	
$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 protected]這個時候請求是成功的

##3. 小結##

今天的內容就到這裡了,大家有沒有學到phalcon的攔截器呢,phalcon的攔截器還可以自己繼承重寫封裝等等功能具體可以參考文件,這裡只是簡單說明一下,程式碼都會上傳喜歡的話可以關注我的部落格哦!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

Phalcon技術交流:364520707 PhalCon中文社群:287484785 歡迎大家的加入!