#phalcon-進階篇1(過濾與清理)#php
本教程基於phalcon2.0.9版本html
##前言## 先在這裏感謝各位phalcon技術愛好者,咱們提供這樣一個優秀的交流平臺前端
最後一次更新已通過去了1個半月,在期間也有不少熱心的童鞋詢問何時會更新,最近應爲去錄製phalapi的視頻還有工做上的事情比較忙因此有些耽擱這裏給各位小夥伴道個歉,後面爭取每週一篇儘早完結phalcon的視頻教程.那麼相信學習了入門篇9節的童鞋基本想用phalcon來寫一些本身的東西已經沒有什麼問題了,可是還記得我說的嗎?phalcon有不少有意思的地方,別急這些都會在咱們的進階篇中一一講解,那麼咱們今天的內容就是過濾和清理!git
注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術數據庫
附上:api
喵了個咪的博客:http://w-blog.cn函數
教程代碼庫:http://git.oschina.net/wenzhenxi/Phalcon-tutorialpost
phalcon官網地址:https://phalconphp.com學習
phalcon中文社區:http://www.iphalcon.cn/this
##1. 清理##
咱們先說清理,清理和有一件事情比較類似打電話,在打電話和別人交談的時候咱們會作些什麼呢,咱們會獲取對咱們有用的信息,屏蔽掉那些雜音,那麼對於程序來講有用的東西是什麼呢?,咱們看下面一組例子:
你們是否是以爲很奇怪,第一個像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 歡迎你們的加入!