Rozdział 33. Zend_Validate

Spis treści

33.1. Wprowadzenie
33.2. Łańcuchy walidatorów
33.3. Pisanie walidatorów
33.4. Walidacja adresów email
33.5. Walidacja adresów serwerów

33.1. Wprowadzenie

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

Czym jest walidator?

Walidator bada dane wejściowe w oparciu o pewne wymagania i tworzy wynik w postaci wartości logicznej - wartość ta mówi czy dane wejściowe spełniają te wymagania. Jeśli dane wejściowe nie spełniają wymagań, walidator może dodatkowo przekazać informacje o tym, które z wymagań nie zostały spełnione.

Na przykład, aplikacja web może wymagać, aby długość nazwy użytkownika mieściła się pomiędzy sześcioma a dwunastoma znakami, a znaki te były jedynie z grupy znaków alfanumerycznych. Walidator może być użyty do sprawdzenia czy nazwa użytkownika spełnia te wymagania. Jeśli wybrana nazwa użytkownika nie spełni jednego lub obu tych wymagań, użytecznie by było wiedzieć, które z wymagań nie zostało spełnione.

Mająć ustaloną w ten sposób definicję walidacji, możemy zapewnić podstawę dla interfejsu Zend_Validate_Interface, który wymaga zaimplementowania przez klasę walidatora dwóch metod, isValid() oraz getMessages(). Metoda isValid() przeprowadza walidację podanej wartości, zwracając true wtedy i tylko wtedy, gdy wartość spełnia kryteria walidacji. Jeśli metoda isValid() zwróci false, za pomocą metody getMessages() można pobrać tablicę wiadomości wyjaśniających powody niepowodzenia walidacji.

[Notatka] Notatka

Metoda getMessages() zwraca wiadomości nieudanej walidacji tylko dla ostatniego wywołania metody isValid(), ponieważ metoda isValid() czyści wszystkie wiadomości pochodzące z poprzednich wywołań metody isValid().

Poniższy przykład ilustruje walidację adresu e-mail:

<?php

require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
    // email jest prawidłowy
} else {
    // email nie jest prawidłowy; wyświetl powody
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

?>