Rozdział 13. Zend_Filter

Spis treści

13.1. Wprowadzenie
13.1.1. Czym jest filtr?
13.1.2. Basic usage of filters
13.1.3. Użycie statycznej metody get()
13.2. Łańcuchy filtrów
13.3. Pisanie filtrów
13.4. Zend_Filter_Input
13.4.1. Declaring Filter and Validator Rules
13.4.2. Creating the Filter and Validator Processor
13.4.3. Retrieving Validated Fields and other Reports
13.4.4. Using Metacommands to Control Filter or Validator Rules
13.4.5. Adding Filter Class Namespaces

13.1. Wprowadzenie

Komponent Zend_Filter zapewnia zestaw najczęściej potrzebnych filtrów danych. Zapewnia też prosty mechanizm łańcuchowego wywoływania filtrów, dzięki ktoremu wiele filtrów może być dodanych do jednej danej w kolejności zdefiniowanej przez programistę.

13.1.1. Czym jest filtr?

W fizycznym świecie, filtr najczęściej jest używany do usuwania niechcianych części danych wejściowych, a żądana część danych wejściowych przechodzi przez filtr jako dane wyjściowe (np. kawa). W takim scenariuszu filtr jest operatorem który tworzy podzbiór danych wejściowych. Ten typ filtrowania jest użyteczny w aplikacjach web - usuwanie niedozwolonych danych wejściowych, usuwanie niepotrzebnych białych znaków itp.

Ta podstawowa definicja filtra może być rozszerzona, aby zawierała uogólnione transformacje na danych wejściowych. Pospolitą transformacją stosowaną w aplikacjach web jest zabezpieczanie przed encjami HTML. Na przykład, jeśli pole formularza jest automatycznie wypełniane niefiltrowanymi danymi wejściowymi (np., z przeglądarki internetowej), ta wartość nie może zawierać encji HTML lub posiadać jedynie zabezpieczone encje HTML, w celu zapobiegania niechcianemu zachowaniu aplikacji oraz słabym punktom bezpieczeństwa. Aby sprostać tym wymaganiom, encje HTML, ktore znajdują się w danych wejściowych muszą być usunięte lub zabezpieczone. Oczywiście to, ktore podejście jest bardziej odpowiednie zależy od sytuacji. Filtr, który usuwa encje HTML działa w kontekście pierwszej definicji filtra - operator który tworzy podzbiór danych wejściowych. Filtr, ktory zabezpiecza encje HTML natomiast przekształca dane wejściowe (np. znak "&" jest zamieniany na "&"). Wspieranie programistów przy takich przypadkach użycia jest ważne, i "filtrowanie" w kontekście użycia Zend_Filter oznacza przeprowadzanie pewnych transformacji na danych wejściowych.

13.1.2. Basic usage of filters

Mająć ustaloną w ten sposób definicję filtra, możemy zapewnić podstawę dla interfejsu Zend_Filter_Interface, który wymaga zaimplementowania przez klasę filtra jednej metody nazwanej filter().

Poniżej jest podstawowy przykład użycia filtra na dwóch danych wyjściowych, na znaku Et (&) oraz na znaku podwójnego cudzysłowu ("):

<?php
require_once 'Zend/Filter/HtmlEntities.php';

$htmlEntities = new Zend_Filter_HtmlEntities();

echo $htmlEntities->filter('&'); // &amp;
echo $htmlEntities->filter('"'); // &quot;

13.1.3. Użycie statycznej metody get()

If it's inconvenient to load a given filter class and create an instance of the filter, you can use the static method Zend_Filter::get() as an alternative invocation style. The first argument of this method is a data input value, that you would pass to the filter() method. The second argument is a string, which corresponds to the basename of the filter class, relative to the Zend_Filter namespace. The get() method automatically loads the class, creates an instance, and applies the filter() method to the data input.

<?php
require_once 'Zend/Filter.php';

echo Zend_Filter::get('&', 'HtmlEntities');

Możesz także przekazać tablicę argumentów konstruktora, jeśli są one potrzebne w klasie filtra.

<?php
require_once 'Zend/Filter.php';

echo Zend_Filter::get('"', 'HtmlEntities', array(ENT_QUOTES));

The static usage can be convenient for invoking a filter ad hoc, but if you have the need to run a filter for multiple inputs, it's more efficient to follow the first example above, creating an instance of the filter object and calling its filter() method.

Also, the Zend_Filter_Input class allows you to instantiate and run multiple filter and validator classes on demand to process sets of input data. See ???.