Walidatory wartości
Potrzebujesz szybko i łatwo sprawdzić, czy zmienna zawiera np. poprawny adres e-mail? To właśnie tam przydaje się Nette\Utils\Validators, statyczna klasa z przydatnymi funkcjami do sprawdzania poprawności wartości.
Instalacja:
Wszystkie przykłady zakładają, że alias został utworzony:
Podstawowe zastosowanie
Klasa posiada szereg metod sprawdzających wartości, takich jak isList(), isUnicode(), isEmail(), isUrl (), itp. do wykorzystania w Twoim kodzie:
Może również sprawdzić, czy wartość jest oczekiwanym typem, który jest ciągiem, w
którym opcje są oddzielone przez |
slash. Możemy więc łatwo sprawdzić wiele typów używając if():
Ale daje nam również możliwość stworzenia systemu, w którym musimy napisać oczekiwania jako ciągi (na przykład w adnotacjach lub konfiguracji), a następnie zweryfikować wartości przeciwko nim.
Możemy również umieścić na oczekiwanych typach żądanie assert(), które rzuca wyjątek, jeśli nie jest spełnione.
Przewidywane rodzaje
Oczekiwane typy tworzą ciąg składający się z jednego lub więcej wariantów oddzielonych pionowym paskiem |
,
podobně jako se zapisují typy v PHP (např. 'int|string|bool')
. Akceptowany jest również zapis zerowy
?int
.
Tablica, w której wszystkie elementy są określonego typu, jest zapisywana jako int[]
.
Po niektórych typach może następować dwukropek i długość :length
lub zakres :[min]..[max]
,
np. string:10
(ciąg 10 bajtów), float:10..
(liczba 10 lub więcej), array:..10
(tablica
do dziesięciu elementów) lub list:10..20
(lista od 10 do 20 elementów), lub wyrażenie regularne u
pattern:[0-9]+
.
Przegląd rodzajów i zasad:
PHP types | ||||
---|---|---|---|---|
array |
można określić zakres dla liczby elementów | |||
bool |
||||
float |
można określić zakres dla wartości | |||
int |
można określić zakres wartości | |||
null |
||||
object |
||||
resource |
||||
scalar |
int | float | bool | string |
string |
można określić zakres długości w bajtach | |||
callable |
||||
iterable |
||||
mixed |
||||
pseudo-typów | ||||
list |
tablica indeksowana, można określić zakres dla liczby elementów | |||
none |
wartość pusta: '' , null , false |
|||
number |
int | float | ||
numeric |
liczba wraz z reprezentacją tekstową | |||
numericint |
liczba całkowita wraz z reprezentacją tekstową | |||
unicode |
UTF-8 ciąg, można określić zakres długości w znakach | |||
Klasa postaci (nie może być pustym ciągiem) | . | |||
alnum |
wszystkie znaki są alfanumeryczne | |||
alpha |
wszystkie znaki to litery [A-Za-z] |
|||
digit |
wszystkie znaki są cyframi | |||
lower |
wszystkie znaki są małymi literami [a-z] |
|||
space |
wszystkie znaki są spacjami | |||
upper |
wszystkie znaki są wielkie [A-Z] |
|||
xdigit |
wszystkie znaki są cyframi szesnastkowymi [0-9A-Fa-f] |
|||
sprawdzanie składni | ||||
pattern |
wyrażenie regularne, które musi pasować do całego łańcucha | |||
email |
||||
identifier |
identyfikator PHP | |||
url |
URL | |||
uri |
URI | |||
uwierzytelnienie środowiska | ||||
class |
jest istniejącą klasą | |||
interface |
to istniejący interfejs | |||
directory |
to istniejący katalog | |||
file |
to istniejący plik |
Asercja
assert($value, string $expected, string
$label='variable'
): void
Sprawdza, czy wartość jest jednym z oczekiwanych typów oddzielonych gwiazdką. Jeśli
nie, rzuca wyjątek Nette\Utils\AssertionException. Słowo
variable
w tekście wyjątku może być zastąpione innym parametrem $label
.
assertField(array $array, string|int $key, ?string $expected=null, ?string $label=null): void
Sprawdza, czy element pod kluczem $key
w polu $array
jest jednym z oczekiwanych typów oddzielonych odwrotnym ukośnikiem. Jeśli nie, rzuca wyjątek Nette\Utils\AssertionException. Ciąg
item '%' in array
w tekście wyjątku można zastąpić innym parametrem $label
.
Walidatory
is($value, string $expected): bool
Sprawdza, czy wartość jest jednym z oczekiwanych typów oddzielonych gwiazdką.
isEmail(mixed $value): bool
Sprawdza, czy podana wartość jest prawidłowym adresem e-mail. Nie sprawdza, czy domena faktycznie istnieje, sprawdzana jest tylko składnia. Funkcja ta uwzględnia również przyszłe TLD, które mogą być w unicode.
isInRange(mixed $value, array $range): bool
Sprawdza czy wartość jest w podanym zakresie [min, max]
gdzie górna lub dolna granica może być pominięta
(null
). Można porównywać liczby, ciągi znaków i obiekty DateTime.
Jeśli brakuje obu granic ([null, null]
) lub wartość jest null
, zwraca false
.
isNone(mixed $value): bool
Sprawdza, czy wartość to 0
, ''
, false
lub null
.
isNumeric(mixed $value): bool
Sprawdza, czy wartość jest liczbą lub liczbą zapisaną w łańcuchu.
isNumericInt(mixed $value): bool
Sprawdza, czy wartość jest liczbą całkowitą lub liczbą zapisaną w łańcuchu.
isPhpIdentifier(string $value): bool
Sprawdza czy wartość jest poprawnym składniowo identyfikatorem w PHP, na przykład dla nazw klas, metod, funkcji itp.
isBuiltinType(string $type): bool
Sprawdza, czy $type
jest wbudowanym typem PHP. W przeciwnym razie jest to nazwa klasy.
isTypeDeclaration(string $type): bool
Sprawdza, czy podana deklaracja typu jest poprawna składniowo.
isClassKeyword(string $type): bool
Sprawdza, czy $type
jest jednym z typów wewnętrznych self
, parent
,
static
.
isUnicode(mixed $value): bool
Sprawdza, czy wartość jest prawidłowym ciągiem znaków UTF-8.
isUrl(mixed $value): bool
Sprawdza, czy wartość jest prawidłowym adresem URL.
isUri(string $value): bool
Sprawdza, czy wartość jest prawidłowym adresem URI, który w rzeczywistości jest ciągiem rozpoczynającym się od poprawnego składniowo schematu.