phalcon-进阶篇1(过滤与清理)

#phalcon-进阶篇1(过滤与清理)#

本教程基于phalcon2.0.9版本

##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台

最后一次更新已经过去了1个半月,在期间也有很多热心的童鞋询问什么时候会更新,最近应为去录制phalapi的视频还有工作上的事情比较忙所以有些耽搁这里给各位小伙伴道个歉,后面争取每周一篇尽早完结phalcon的视频教程.那么相信学习了入门篇9节的童鞋基本想用phalcon来写一些自己的东西已经没有什么问题了,但是还记得我说的吗?phalcon有很多有意思的地方,别急这些都会在我们的进阶篇中一一讲解,那么我们今天的内容就是过滤和清理!

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:http://w-blog.cn

教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial

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

phalcon中文社区:http://www.iphalcon.cn/

##1. 清理##

我们先说清理,清理和有一件事情比较相似打电话,在打电话和别人交谈的时候我们会做些什么呢,我们会获取对我们有用的信息,屏蔽掉那些杂音,那么对于程序来说有用的东西是什么呢?,我们看下面一组例子:

  1. some(one)@exa\mple.com
  2. hello<<
  3. !100a019
  4. !100a019.01a

大家是不是觉得很奇怪,第一个像email但是有括号,第二个是字符串但是有<号,第三个和第四个像数字但是有符号和字母,有的时候如果前端没有做参数校验,或者是直接请求接口很容易出现这类情况,但是这类情况到了数据库中就会出现问题,email发布出去,显示出来的名字很奇怪,数字到了数据库中是0等等这些情况就出现来,我们看看phalcon怎么应对这些问题:

<?php

use Phalcon\Filter;
$filter = new Filter();

// 返回 "someone@example.com"
$filter->sanitize("some(one)@exa\mple.com", "email");

// 返回 "hello"
$filter->sanitize("hello<<", "string");

// 返回 "100019"
$filter->sanitize("!100a019", "int");

// 返回 "100019.01"
$filter->sanitize("!100a019.01a", "float");

是不是很好用啊?这样就可以解决上面遇到的这些问题,当然这个是单独的组件使用,如果用在控制器中有更简单的使用方式:

 public function saveAction()
    {
        // 获取post参数key为price的值并且使用double类型清理
        $price = $this->request->getPost("price", "double");

        // 获取post参数key为customerEmail的值并且使用email类型清理
        $email = $this->request->getPost("customerEmail", "email");
    }

##2. 过滤##

说完了清理我们在来讲讲过滤,过滤和清理不同的在于他们解决的问题不同,过滤可以理解为高级的清理,我们还是看个例子:

有的时候只希望去掉html标签符号,或者字符串只希望去除前后的空格而不去掉其他符号就可以用一下的方式 <?php

use Phalcon\Filter;

$filter = new Filter();

// 返回 "Hello"
$filter->sanitize("<h1>Hello</h1>", "striptags");

// 返回 "Hello"
$filter->sanitize("  Hello   ", "trim");

过滤大部分都是为了满足自定义类型居多,比如md5的验证ip的验证还有一些关键ID,我们可以定义我们自己的过滤类型

<?php

use Phalcon\Filter;

$filter = new Filter();

// 使用匿名函数
$filter->add('md5', function ($value) {
    return preg_replace('/[^0-9a-f]/', '', $value);
});

// 利用md5过滤器清理
$filtered = $filter->sanitize($possibleMd5, "md5");

或者,如果你愿意,你可以在类中实现过滤器:

<?php

use Phalcon\Filter;

class IPv4Filter
{
    public function filter($value)
    {
        return filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
    }
}

$filter = new Filter();

// 使用对象
$filter->add('ipv4', new IPv4Filter());

// 利用"ipv4"过滤器清理
$filteredIp = $filter->sanitize("127.0.0.1", "ipv4");

##3. 小结##

今天的内容就到这里了,实例代码也会随之上传,感兴趣的童鞋可以下下来运行试试,那么感谢大家的支持,喜欢的话可以关注我的博客哦!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

反编译对于黑客技术的帮助有多大

目前很多技术都被涉及了,也有很多的技术被挖掘出来,但是很多人对技术不是这么了解的,可能会吃亏,比如说目前挺火的黑客技术还有反编译技术都是属于很多了解却不是这么熟...

386110
来自专栏轮子工厂

Java学习视频教程一网打尽

对于自学Java的初学者来说,一定会非常希望有个大神带你一步一步由浅入深系统的学习Java知识,绕过所有的坑,那么跟着视频教程学肯定是最好的途径了。 本文汇总j...

25060
来自专栏Java架构

必看!多年架构师告诉你为什么要学JVM?

31940
来自专栏WeTest质量开放平台团队的专栏

iOS微信内存监控

本文介绍如何实现离线化的内存监控工具,用于 App 上线后发现内存问题。

1.5K50
来自专栏Bingo的深度学习杂货店

synchronized锁处理spring事务高并发请求

最近在写一个活动报名功能,会有多个人同时报名某个活动,要求当参与人数超过限制人数的时候,就报出人数已满的信息。

83210
来自专栏圣杰的专栏

DDD理论学习系列(6)-- 实体

1.引言 实体对应的英语单词为Entity。提到实体,你可能立马就想到了代码中定义的实体类。在使用一些ORM框架时,比如Entity Framework,实体作...

28980
来自专栏企鹅号快讯

Java程序员修炼之路线程篇之终篇

Java程序员修炼之路线程篇之终篇 在头条上撰写了20多篇关于java线程的文章,收获了很多读者的肯定和鼓励,在此表示感谢!特别感谢持续关注我,转发我的文章并给...

20680
来自专栏卡少编程之旅

REACT框架学习心得

36170
来自专栏Linyb极客之路

Redis作者谈如何编写系统软件的代码注释

顶顶大名的Redis作者谈如何在Redis这样系统软件上进行代码文档注释,以下是九种注释类型的大意说明: 很长一段时间以来,我一直想在YouTube上发布一段...

19560
来自专栏程序员互动联盟

【答疑解惑第十二讲】windows编程学习框架图

存在问题: 桌面系统windows为王,windows编程大有可为。 解决方案: 大家知道现在PC市场上,Windows、Linux、Mac基本占了百分之九十多...

32660

扫码关注云+社区

领取腾讯云代金券