Klasa Zend_Filter_Input
dostarcza metody, które zapewniają
uporządkowane podejście do filtrowania danych przychodzących. Jej przeznaczenie
jest różnorodne, ponieważ zaspokaja ona potrzeby trzech różnych grup ludzi:
Programiści
Chociaż filtrowanie danych wejściowych nigdy nie może być tak łatwe jak nierobienie niczego, programiści potrzebują zapewnić integralną czystość swoim danym nie dodając w tym celu niepotrzebnej złożoności kodu.
Menadżerzy
Menadżerzy którzy chcą zachować kontrolę nad dużą grupą programistów mogą narzucić gotowy sposób filtrowania danych wejściowych, a także mogą wyeliminować dostęp to niefiltrowanych danych wejściowych.
Audytorzy
Ci, którzy sprawdzają kod aplikacji potrzebują szybko i solidnie sprawdzić kiedy i gdzie używane są dane wejściowe w czystej postaci. Zasady, które sprzyjają pisaniu przejrzystego kodu wspierają także audytorów zapewniając im jasne odróżnienie pomiędzy różnymi sposobami filtrowania danych wejściowych.
Jest wiele różnych zdań na temat filtrowania danych przychodzących i jest wiele różnych metod, których programiści mogą użyć. Filtrowanie whitelist, filtrowanie blacklist, wyrażenia regularne, wyrażenia warunkowe oraz natywne funkcje PHP są tylko kilkoma przykładami filtrowania danych przychodzących.
W celu zapewnienia uporządkowanego dostępu do filtrowania danych
wejściowych, domyślnie Zend_Filter_Input
próbuje
forsować kontrolowany dostęp do danych wejściowych ustawiając
wartość źródłowej tablicy na null
.
W podejściu domyślnym (ścisłym), do konstruktora przekazywany jest
jeden argument - tablica danych do filtrowania. Niefiltrowane dane
są dostępnę tylko za pomocą metody getRaw()
:
<?php // $_POST['email'] === 'webmaster@example.com' // Filtruje dane z tablicy $_POST require_once 'Zend/Filter/Input.php'; $filterPost = new Zend_Filter_Input($_POST); // $_POST ma teraz wartość null echo null === $_POST ? 'yes' : 'no'; // wyświetla 'yes' // Pobiera niefiltrowaną wartość e-mail echo $filterPost->getRaw('email'); // wyświetla 'webmaster@example.com'
Zend_Filter_Input
ustawia wartość przekazanej
tablicy ($_POST
) na null
, więc
bezpośredni do niej dostęp nie jest już możliwy. (Dane niefiltrowane
są wciąż dostępne za pomocą metody getRaw()
, która
jest łatwiejsza do monitorowania)
W podejściu opcjnalnym (nieścisłym), wartość false
jest przekazywana jako drugi argument do konstruktora:
<?php // $_POST['email'] === 'webmaster@example.com' // Filtruje dane z tablicy $_POST require_once 'Zend/Filter/Input.php'; $filterPost = new Zend_Filter_Input($_POST, false); // tablica $_POST wciąż jest zdefiniowana echo null === $_POST ? 'yes' : 'no'; // wyświetla 'no' // Pobiera niefiltrowaną wartość e-mail echo $filterPost->getRaw('email'); // wyświetla 'webmaster@example.com'
Użycie filtra jest dokładnie takie same, ale
Zend_Filter_Input
nie ustawia wartości
oryginalnej tablicy ($_POST
) na
null
, więc programiści wciąż mają do niej
bezpośredni dostęp. Te podejście jest odradzane na rzecz podejścia
ścisłego.
Zend_Filter_Input
jest zaprojektowany do pracy
z tablicami. Wiele źródeł danych wejścioywych jest oparta na
superglobalnych tablicach PHP ($_GET
,
$_POST
, $_COOKIE
, itp.), a
tablice są główną konstrukcją używaną do przechowywania danych
wejściowych z innych źródeł. Jeśli potrzebujesz filtrować dane
skalarne, zobacz Rozdział 11, Zend_Filter.