1. 程式人生 > 其它 >phalcon-進階篇1(過濾與清理)

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)@example.com
  2. hello<<
  3. !100a019
  4. !100a019.01a

大家是不是覺得很奇怪,第一個像email但是有括號,第二個是字串但是有<號,第三個和第四個像數字但是有符號和字母,有的時候如果前端沒有做引數校驗,或者是直接請求介面很容易出現這類情況,但是這類情況到了資料庫中就會出現問題,email釋出出去,顯示出來的名字很奇怪,數字到了資料庫中是0等等這些情況就出現來,我們看看phalcon怎麼應對這些問題:

<?php

use PhalconFilter;
$filter = new Filter();

// 返回 "[email protected]"
$filter->sanitize("some(one)@example.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 PhalconFilter;

$filter = new Filter();

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

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

過濾大部分都是為了滿足自定義型別居多,比如md5的驗證ip的驗證還有一些關鍵ID,我們可以定義我們自己的過濾型別

<?php

use PhalconFilter;

$filter = new Filter();

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

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

或者,如果你願意,你可以在類中實現過濾器:

<?php

use PhalconFilter;

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