Rozdział 17. Zend_Filter

Spis treści

17.1. Wprowadzenie
17.1.1. Czym jest filtr?
17.1.2. Basic usage of filters
17.1.3. Użycie statycznej metody get()
17.2. Standardowe klasy filtrów
17.2.1. Alnum
17.2.2. Alpha
17.2.3. BaseName
17.2.4. Digits
17.2.5. Dir
17.2.6. HtmlEntities
17.2.7. Int
17.2.8. StripNewlines
17.2.9. RealPath
17.2.10. StringToLower
17.2.11. StringToUpper
17.2.12. StringTrim
17.2.13. StripTags
17.3. Łańcuchy filtrów
17.4. Pisanie filtrów
17.5. Zend_Filter_Input
17.5.1. Declaring Filter and Validator Rules
17.5.2. Creating the Filter and Validator Processor
17.5.3. Retrieving Validated Fields and other Reports
17.5.3.1. Querying if the input is valid
17.5.3.2. Getting Invalid, Missing, or Unknown Fields
17.5.3.3. Getting Valid Fields
17.5.4. Using Metacommands to Control Filter or Validator Rules
17.5.4.1. The FIELDS metacommand
17.5.4.2. The PRESENCE metacommand
17.5.4.3. The DEFAULT_VALUE metacommand
17.5.4.4. The ALLOW_EMPTY metacommand
17.5.4.5. The BREAK_CHAIN metacommand
17.5.4.6. The MESSAGES metacommand
17.5.4.7. Using options to set metacommands for all rules
17.5.5. Adding Filter Class Namespaces
17.6. Zend_Filter_Inflector
17.6.1. Operation
17.6.2. Setting Paths To Alternate Filters
17.6.3. Setting the Inflector Target
17.6.4. Inflection Rules
17.6.4.1. Static Rules
17.6.4.2. Filter Inflector Rules
17.6.4.3. Setting Many Rules At Once
17.6.5. Utility Methods
17.6.6. Using Zend_Config with Zend_Filter_Inflector

17.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ę.

17.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.

17.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 ("):

$htmlEntities = new Zend_Filter_HtmlEntities();

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

            

17.1.3. Użycie statycznej metody get()

Jeśli niewygodne jest ładowanie danej klasy filtra i tworzenie instancji filtra, możesz użyć statycznej metody Zend_Filter::get() jako alternatywnego sposobu wywołania. Pierwszym argumentem tej metody są dane wejściowe, które chcesz przekazać do metody filter(). Drugi argument jest łańcuchem znaków, który odpowiada, bazowej nazwie klasy filtra, relatywnie do przestrzeni nazw Zend_Filter. Metoda get() automatycznie ładuje klasę, tworzy instancję i wywołuje metodę filter() na danych wejściowych.

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

            

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

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

            

Użycie statyczne może być wygodne dla jednorazowego wywołania filtra, ale jeśli musisz wywołać filtr dla większej ilości danych, bardziej efektywne jest wykorzystanie rozwiązania pokazanego w pierwszym przykładzie, czyli utworzenie instancji obiektu filtra i wywołanie metody filter().

Dodatkowo klasa Zend_Filter_Input pozwala na utworzenie instancji i wywołanie większej ilości klas filtrów i weryfikatorów w celu przetworzenia zestawu danych wejściowych. Zobacz Sekcja 17.5, „Zend_Filter_Input”.