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

倖福魔咒の 提交于 2019-12-02 00:02:19

#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 欢迎大家的加入!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!