11.4. Zend_Filter_Input
Poprzedni | Rozdział 11. Zend_Filter | Następny

## 11.4. Zend_Filter_Input

### 11.4.1. Wprowadzenie

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.

### 11.4.2. Opis działania

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.

Poprzedni | Początek rozdziału | Następny
11.3. Pisanie filtrów | Spis treści | Rozdział 12. Zend_Gdata