Khái niệm Filter
Filter là bộ lọc cho ứng dụng web nhằm loại bỏ, cắt gọt các dữ liệu không phù hợp. Cơ bản bộ lọc sẽ biến đổi dữ liệu đầu vào sao cho thích hợp. Ví dụ như những ký tự đặc biệt trong HTML được biến đổi để cho an toàn (như ký tự &).
Đảm bảo thư viện bạn dùng đã tích hợp Filter trước khi sử dụng, nếu chưa sử dụng lệnh composer sau
composer require zendframework/zend-filter
Filter là bộc lọc, mà dữ liệu khi đi qua nó sẽ biến đổi theo yêu cầu của ứng dụng. Để hiểu về thế nào là filter hãy xem ví dụ sau. Trong Zend Framework có sẵn một filter chuẩn là StringToLower mà dữ liệu qua nó thì chữ Hòa sẽ chuyển thành chữ thường.
$str = 'Học Zend Framework'; $strfilter = new \Zend\Filter\StringToLower(); $str = $strfilter->filter($str); //Hoặc $str = $strfilter($str); //học zend framework echo $str;
Sử dụng StaticFilter
Ngoại cách tạo ra các đối tượng cho bộ lọc muốn sử dụng như trên, bạn có thể sử dụng nhanh bằng lớp sử dụng StaticFilter để khởi tạo bộ lọc và sử dụng luôn.
Cú pháp:
$datafilter = \Zend\Filter\StaticFilter::execute($data, 'NameFilter', $args = []);
NameFilter
tên Filter trong hệ thống, xem Danh sách các Filter ở dưới.
$args
nếu có là mảng dữ liệu thiết lập tùy từng Filter cụ thể
Ví dụ trên có thể sử lại là:
$str = 'Học Zend Framework'; $str = \Zend\Filter\StaticFilter::execute($str, 'StringToLower'); //học zend framework echo $str;
Dữ liệu của bạn có thể lọc nhiều lần qua các bộ lọc khác nhau để có được dữ liệu phù hợp.
Danh sách các Filter chuẩn
Trong Zend Framework xây dựng sẵn cho bạn các Filter mà có thể dùng ngay dưới đây, nếu yêu cầu chưa đáp ứng đủ cho bạn thì bạn cần tự xây dựng thêm các Filter riêng trình bày ở dưới.
Alnum
Chỉ giữ lại ký tự chữ hoặc số (loại bỏ các ký tự đặc biệt)
echo \Zend\Filter\StaticFilter::execute( 'Học lập trình (PHP) #Zend Framework 3.x#', 'Alnum', ['allowWhiteSpace'=>true] ); //Học lập trình PHP Zend Framework 3x
Alpha
Chỉ giữ lại ký tự bảng chữ cái
echo \Zend\Filter\StaticFilter::execute( 'Học lập trình (PHP) #Zend Framework 3.x#', 'Alpha', ['allowWhiteSpace'=>true] ); //Học lập trình PHP Zend Framework x
BaseName
Trả về tên cơ sở của file
$filter = new Zend\Filter\BaseName(); print $filter->filter('/vol/tmp/filename'); //filename print $filter->filter('/vol/tmp/filename.txt'); //filename.txt
Blacklist
Trả về null
nếu dữ liệu đưa vào có trong danh sách BlackList, còn nếu không có trả về chính dữ liệu đưa vào.
$blacklist = new \Zend\Filter\Blacklist([ 'list' => ['UK', 'US',] ]); echo $blacklist->filter('UK'); // => null echo $blacklist->filter('VN'); // => 'VN'
Boolean
Chuyển dữ liệu nhập vào thành kiểu boolean nhận giá trị false hoặc true.
$filter = new Zend\Filter\Boolean(); $value = ''; $result = $filter->filter($value); // returns false
Callback
Nếu bạn có một hàm, một lớp sử lý biến đổi dữ liệu riêng. Giờ muốn sử dụng nó như filter thì dùng CallBack
$filter = new Zend\Filter\Callback('strrev'); print $filter->filter('Hello!'); // returns "!olleH" // strrev là hàm đảo ký tự của PHP
Nếu callback là một phương thức tĩnh của lớp ví dụ: MyClass::myMethod
$filter = new Zend\Filter\Callback(array('MyClass', 'myMethod'));
Compress / Decompress
Nén / giải nén file, chuỗi, thư mục. Khởi tạo filter này với hai tham số:
adapter:
Adapter sử dụng (định dạng nén), mặc định làGz
, bạn có thể chọn: Bz2, Gz, Lzf, Rar, Tar, Zipoptions:
Các tùy chọn tùy thuộc vào Adapter.
$filter = new Zend\Filter\Compress('Bz2'); $compressed = $filter->filter('Uncompressed string'); // Returns the compressed string
Digits
Chỉ giữ lại số.
Dir
Dữ liệu vào là đường dẫn tới file, dữ liệu trả ra là đường dẫn thư mục chứa file.
Encrypt / Decrypt
Mã hóa và giải mã chuỗi. Hỗ trợ Adapter là BlockCipher và openssl
$filter = new Zend\Filter\Encrypt(['adapter' => 'BlockCipher']); $filter->setKey('encryption key'); $encrypted = $filter->filter('text to be encrypted'); printf ("Encrypted text: %s\n", $encrypted);
HtmlEntities
Chuyển chuỗi thành giá trị biểu diễn mã HTML nếu có thể.
$filter = new Zend\Filter\HtmlEntities(); print $filter->filter('<'); $filter = new Zend\Filter\HtmlEntities(['quotestyle' => ENT_QUOTES]); $input = "A 'single' and " . '"double"'; print $filter->filter($input); //A 'single' and "double" $filter = new Zend\Filter\HtmlEntities(['quotestyle' => ENT_COMPAT]); $input = "A 'single' and " . '"double"'; print $filter->filter($input);//A 'single' and "double"
ToInt
Chuyển dữ liệu thành số nguyên
$filter = new Zend\Filter\ToInt(); print $filter->filter('-4 is less than 0'); //-4
ToNull
Chuyển dữ liệu thành NULL nếu có thể nếu không giữ nguyên giá trị. Điều này cần thiết khi làm việc với database.
$filter = new Zend\Filter\ToNull(); $value = ''; $result = $filter->filter($value); // trả về null thay về chuỗi rỗng ''
PregReplace
Tìm và thay thế theo biểu thức chính quy
$filter = new Zend\Filter\PregReplace([ 'pattern' => '/bob/', 'replacement' => 'john', ]); $input = 'Hi bob!'; $filter->filter($input); // returns 'Hi john!'
StringToLower / StringToUpper
Chuyển thành chữ thường, chữ Hoa
$filter = new Zend\Filter\StringToLower(['encoding' => 'UTF-8']); print $filter->filter('SAMPLE');
StringTrim
Cắt các ký tự chỉ ra bắt gặp ở đầu ở cuối chuỗi.
//Bỏ khoảng trắng ở đầu, cuối $filter = new Zend\Filter\StringTrim(); print $filter->filter(' This is (my) content: '); //Cắt bỏ các ký tự chỉ ra ở đầu, cuối chuối $filter = new Zend\Filter\StringTrim(':#$'); // or new Zend\Filter\StringTrim(array('charlist' => ':#$')); print $filter->filter(' This is (my) content:');
StripNewlines
Loại bỏ ký tự xuống dòng
$filter = new Zend\Filter\StripNewlines(); print $filter->filter(' This is (my)``\n\r``content: '); //Out:This is (my) content:
StripTags
Loại bỏ các HTML Tag
$filter = new Zend\Filter\StripTags(); print $filter->filter('My content'); //OUT: My content
Whitelist
Trả về null nếu giá trị đưa vào không có trong danh sách
$whitelist = new \Zend\Filter\Whitelist([ 'list' => ['allowed-1', 'allowed-2'] ]); echo $whitelist->filter('allowed-2'); // => 'allowed-2' echo $whitelist->filter('not-allowed'); // => null
Rename
Đổi tên file, di chuyển file
// Di chuyển các file sang một thư mục khác $filter = new \Zend\Filter\File\Rename('/tmp/'); echo $filter->filter('./myfile.txt'); // File has been moved to '/tmp/myfile.txt'
// Đổi tên file $filter = new \Zend\Filter\File\Rename('/tmp/newfile.txt'); echo $filter->filter('./myfile.txt'); // File has been renamed to '/tmp/newfile.txt'
Lọc theo chuỗi FilterChain
FilterChain cho phép bạn tạo ra bộ lọc chứa nhiều filter, dữ liệu sẽ đi qua tất cả các filter này
// Create a filter chain and add filters to the chain $filterChain = new Zend\Filter\FilterChain(); $filterChain ->attach(new Zend\I18n\Filter\Alpha()) ->attach(new Zend\Filter\StringToLower()); // Filter the username $username = $filterChain->filter($_POST['username']);
Nếu bạn tự tạo filter cho mình, thì filter được đưa vào chuỗi lọc như sau
$filterChain = new Zend\Filter\FilterChain(); $filterChain->getPluginManager()->setInvokableClass( 'myNewFilter', 'MyCustom\Filter\MyNewFilter' ); $filterChain->attachByName('alpha') ->attachByName('myNewFilter');
Viết Filter
Đơn giản là triển khai giao diện FilterInterface. Tạo ra filter tên MyFilter
use Zend\Filter\FilterInterface; class MyFilter implements FilterInterface { public function filter($value) { // Các đoạn code xử lý dữ liệu $value để trả về $valueFilter của bạn return $valueFiltered; } }
Khi áp dụng, sử dụng như các filter khác, ví dụ:
$filterChain = new Zend\Filter\FilterChain(); $filterChain->attach(new Application\Filter\MyFilter());