#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 欢迎你们的加入!