11.4. Zend_Filter_Input
Пред. | Глава 11. Zend_Filter | След.

## 11.4. Zend_Filter_Input

### 11.4.1. Введение

`Zend_Filter_Input` предоставляет средства, способствующие сруктурированному подходу к фильтрации входных данных. Он преслеует несколько целей, поскольку должен удовлетворять потребности трех различных групп людей:

- Разработчики

  Хотя фильтрация входных данных всегда требует некоторых усилий, разработчикам нужна уверенность в целостности их данных без добавления лишней сложности в их код.

- Менеджеры

  Менеджеры всех типов, которым необходим постоянный контроль за большой группой разрабочиков, могут принудить разработчиков к системному подходу к фильтрации входных данных посредством ограничения или исключения доступа к необработанным входным данным.

- Аудиторы

  Тем, кто проверяет код приложения, нужно быстрое и достоверное определение того, где и когда разрабочик использует необработанные входные данные. Свойства, которые способствуют ясности кода, также оказывают помощь аудиторам тем, что обеспечивают четкую различимость разных подходов к фильтрации входных данных.

Есть множество подходов к фильтрации входных данных и средств, применяемых разработчиками PHP. Фильтрация по "белому списку", по "черному списку", регулярные выражения, условные операторы, встроенные функции PHP - только несколько примеров из всего разнообразия подходов к фильтрации входных данных.

### 11.4.2. Теория

Для того, чтобы обеспечить структурный подход к фильтрации входных данных, `Zend_Filter_Input` пытается усилить контроль за доступом к входным данным поредством установки ссылки на массив исходных данных в `null`.

В подходе, принятом по умолчанию, (строгом) конструктору передается единственный аргумент - массив данных для фильтрации. Нефильтрованные данные могут быть получены только через метод `getRaw()`.

    <?php
    // $_POST['email'] === 'webmaster@example.com'

    // Фильтрация массива данных $_POST
    require_once 'Zend/Filter/Input.php';
    $filterPost = new Zend_Filter_Input($_POST);

    // $_POST теперь равен null
    echo null === $_POST ? 'yes' : 'no'; // prints 'yes'

    // Получение необработанного значения e-mail
    echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'

`Zend_Filter_Input` устанавливает переданный массив (`$_POST`) в `null`, поэтому прямой доступ будет невозможным. (Необработанные данные будут доступны только через метод `getRaw()`, через который легче контролировать доступ к необработанным данным и/или полностью исключить его).

В опциональном (нестрогом) подходе конструктору в качестве второго аргумента передается `false`.

    <?php
    // $_POST['email'] === 'webmaster@example.com'

    // Фильтрация массива данных $_POST
    require_once 'Zend/Filter/Input.php';
    $filterPost = new Zend_Filter_Input($_POST, false);

    // $_POST не равен null
    echo null === $_POST ? 'yes' : 'no'; // выводит 'no'

    // Получение необработанного значение e-mail
    echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'

Использование фильтра будет в точности таким же, как в случае строгого подхода, но `Zend_Filter_Input` не устанавливает исходный массив (`$_POST`) в `null`, и таким образом, разработчики смогут по-прежнему обращаться к нему напрямую. Этот подход не рекомендуется, вместо него рекомендуется использовать строгий подход.

`Zend_Filter_Input` спроектирован для использования массивов данных. Многие источники входных данных уже охвачены суперглобальными массивами PHP (`$_GET`, `$_POST`, `$_COOKIE` и т.д.), массивы являются конструкцией, наиболее часто используемой для хранения входных данных из других источников. Если вам нужно фильтровать скалярные значения, см. Глава 11, Zend_Filter.

Пред. | Уровень выше | След.
11.3. Написание фильтров | Начало | Глава 12. Zend_Gdata