Programmer's Reference Guide
| Einführung |
Standard Prüfklassen
Zend Framework kommt mit einem Standardset von Prüfklassen, welche fertig zur Verwendung sind.
Alnum
Gibt nur dann true zurück wenn $value nur alphabetische
und digitale Zeichen enthält. Dieser Prüfer enthält eine Option um auszuwählen ob
Leerzeichen als gültig anzusehen sind.
Hinweis: Alphabetische Zeichen bedeuten Zeichen die in jeder Spache Wörter bilden. Trotzdem wird das englische Alphabet in den folgenden Sprachen für alphabethische Zeichen verwendet: Chinesisch, Japanisch, Koreanisch. Die Sprache wurde von Zend_Locale spezifiziert.
Alpha
Gibt nur dann true zurück wenn $value nur alphabetische
Zeichen enthält. Dieser Prüfer enthält eine Option um auszuwählen ob Leerzeichen
als gültig anzusehen sind.
Barcode
Dieser Prüfer wird mit einem Barcode Typ instanziert gegen den ein Barcode Wert geprüft
werden soll. Aktuell werden die "UPC-A" (Universal Product Code) und
"EAN-13" (European Article Number) Barcode Typen unterstützt, und die
isValid() Methode gibt dann und nur dann true zurück wenn die Eingabe
erfolgreich gegen den Barcode Prüfalgorithmus geprüft wurde. Es sollten alle von den
Ziffern 0 bis 9 (0-9) unterschiedliche Zeichen vom Eingabewert entfernt werden bevor
dieser an den Prüfer übergeben wird.
Between
Gibt nur dann true zurück wenn $value zwischen dem minimalen
und maximalen Grenzwert ist. Der Vergleich ist standardmäßig inklusive
($value kann gleich dem Grenzwert sein), kann aber überschrieben werden um
einen strikten Vergleich dort durchzuführen wo $value strikt größer als das
Minimum und strikt kleiner als das Maximum sein muß.
Ccnum
Gibt nur dann true zurück wenn $value dem Luhn Algorithmus
(mod-10 Checksumme) für Kreditkarten Nummern folgt.
Date
Gibt nur dann true zurück wenn $value ein gültiges Datum im
Format YYYY-MM-DD ist. Wenn die optionale locale Option
gesetzt ist, dann wird das Datum entsprechend dem gesetzten Gebietsschemas geprüft. Und
wenn die optionale format Option gesetzt wird, dann wird dieses Format für
die Prüfung herangezogen. Für Details über die optionalen Parametern siehe
Zend_Date::isDate().
Db_RecordExists und Db_NoRecordExists
Zend_Validate_Db_RecordExists und Zend_Validate_Db_NoRecordExists bieten die Möglichkeit zu testen ob ein Eintrag in einer angegebenen Tabelle einer Datenbank, mit einem gegebenen Wert, existiert.
Grundsätzliche Verwendung
Ein Beispiel der rundsätzlichen Verwendung der Validatoren:
// Prüft ob die Email Adresse in der Datenbank existiert
$validator = new Zend_Validate_Db_RecordExists('users', 'emailaddress');
if ($validator->isValid($emailaddress)) {
// Die Email Adresse scheint gültig zu sein
} else {
// Die Email Adresse ist ungültig; gib die Gründe an
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
Das oben stehende testet ob eine gegebene Email Adresse in der Datenbanktabelle
vorhanden ist. Wenn kein Eintrag gefunden wird der den Wert von
$emailaddress in der spezifizierten Spalte hat, wird eine
Fehlermeldung angezeigt.
// Prüft ob der Benutzername in der Datenbank existiert
$validator = new Zend_Validate_Db_NoRecordExists('users', 'username');
if ($validator->isValid($username)) {
// Der Benutzername scheint gültig zu sein
} else {
// Der Benutzername ist ungültig; gib die Gründe an
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
Das oben stehende testet ob ein angegebener Benutzername nicht in der Datenbanktabelle
vorhanden ist. Wenn ein Eintrag gefunden wird, der den der von $username
in der spezifizierten Spalte enthält, dann wird eine Fehlermeldung angezeigt.
Ausnehmen von Einträgen
Zend_Validate_Db_RecordExists und Zend_Validate_Db_NoRecordExists bieten auch die Möglichkeit die Datenbank zu testen, wobei Teile der Tabelle hiervon ausgenommen werden, entweder indem eine where Klausel als String angegeben wird, oder ein Array mit den Schlüsseln "field" und "value".
Wenn ein Array für die Ausnahmeklausel angegeben wird, dann wird der !=
Operator verwenden. Damit kann der Rest einer Tabelle auf einen Wert geprüft werden
bevor ein Eintrag geändert wird (zum Beispiel in einem Formular für ein
Benutzerprofil).
// Prüft ob kein anderer Benutzer diesen Benutzernamen hat
$user_id = $user->getId();
$validator = new Zend_Validate_Db_NoRecordExists(
'users',
'username',
array(
'field' => 'id',
'value' => $user_id
)
);
if ($validator->isValid($username)) {
// Der Benutzername scheint gültig zu sein
} else {
// Der Benutzername ist ungültig; zeige den Grund
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
Das obige Beispiel prüft die Tabelle um sicherzustellen das keine anderen Einträge
existieren bei denen id = $user_id als Wert $username enthalten.
Man kann auch einen String an die Ausnahmeklausel angeben damit man einen anderen
Operator als != verwenden kann. Das kann nützlich sein um bei geteilten
Schlüsseln zu testen.
$post_id = $post->getId();
$clause = $db->quoteInto('post_id = ?', $category_id);
$validator = new Zend_Validate_Db_RecordExists(
'posts_categories',
'post_id',
$clause
);
if ($validator->isValid($username)) {
// Der Benutzername scheint gültig zu sein
} else {
// Der Benutzername ist ungültig; die Gründe ausgeben
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
Das obige Beispiel prüft die Tabelle posts_categories und stellt sicher
das ein Eintrag der post_id einen Wert hat der $category_id
entspricht.
Datenbank Adapter
Man kann auch einen Adapter, als vierten Parameter, spezifizieren wenn man die Prüfung instanziiert. Das erlaubt es mit Anwendungen zu arbeiten die mehrere Datenbankadapter verwenden, oder wo kein Standardadapter gesetzt wird. Als Beispiel:
$validator = new Zend_Validate_Db_RecordExists('users', 'id', null, $dbAdapter);
Digits
Gibt nur dann true zurück wenn $value nur digitale Zeichen
enthält.
Email Adresse
Zend_Validate_EmailAddress erlaubt die Prüfung von Email Adressen. Der Prüfer teilt zuerst die Email Adresse in lokalen Teil @ hostname und versucht diese mit bekannten Spezifikationen für Email Adressen und Hostnamen zu prüfen.
Normale Verwendung
Ein Beispiel einer normalen Benutzung ist anbei:
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
// Email Adresse scheint gültig zu sein
} else {
// Email Adresse ist ungültig, drucke die Gründe hierfür
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
$email und gibt bei einem Fehler über
$validator->getMessages() eine nützliche Fehlermeldung aus.
Komplexe lokale Abschnitte
Zend_Validate_EmailAdress prüft jede gültige Email Adresse mit
RFC2822. Gültige Email Adressen sind zum Beispiel bob@domain.com,
bob+jones@domain.us, "bob@jones"@domain.com und
"bob jones"@domain.com
Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein "\" Zeichen in einer Email Adresse).
Prüfen von unterschiedlichen Typen von Hostnamen
Der Teil des Hostnamens einer Email Adresse wird mit
Zend_Validate_Host
geprüft. Standardmäßig werden nur DNS Hostnamen in der Form domain.com
akzeptiert, aber wenn es gewünscht ist, können auch IP Adressen und lokale Hostnamen auch
akzeptiert werden.
Um das zu tun, muß eine Zend_Validate_EmailAddress Instanz erstellt werden der ein Parameter übergeben wird, um den Typ des Hostnamens anzugeben der akzeptiert werden soll. Mehr Details sind in Zend_Validate_Hostname inkludiert, zusammen mit einem Beispiel, wie DNS und lokale Hostnamen, akzeptiert werden wie im Beispiel das anbei steht:
$validator = new Zend_Validate_EmailAddress(
Zend_Validate_Hostname::ALLOW_DNS |
Zend_Validate_Hostname::ALLOW_LOCAL);
if ($validator->isValid($email)) {
// Email Adresse scheint gültig zu sein
} else {
// Email ist ungültig; Gründe ausdrucken
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
Prüfen ob der Hostname aktuell Emails akzeptiert
Nur weil eine Email Adresse im richtigen Format ist, heißt das notwendigerweise nicht das die Email Adresse aktuell auch existiert. Um dieses Problem zu lösen, kann MX Prüfung verwendet werden um zu prüfen ob ein MX (Email) Eintrag im DNS Eintrag für den Hostnamen der Email existiert. Das zeigt ob der Hostname Emails akzeptiert, sagt aber nicht aus, ob die genaue Email Adresse selbst gültig ist.
Die MX Prüfung ist standardmäßig nicht eingeschaltet und wird aktuell nur durch UNIX Platformen unterstützt. Um die MX Prüfung einzuschalten kann ein zweiter Parameter an den Zend_Validate_EmailAddress Konstruktor übergeben werden.
$validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
true);
true oder false an
$validator->setValidateMx() übergeben werden um die MX Prüfung ein- oder
auszuschalten.
Durch das einschalten dieser Option werden Netzwerk Funktionen verwendet um zu Prüfen ob ein MX Eintrag am Hostnamen der Email Adresse existiert, welche geprüft werden soll. Vorsicht davor, das hierbei das eigene Skript langsamer wird.
Internationale Domain Namen prüfen
Zend_Validate_EmailAddress prüft auch internationale Zeichen prüfen, die in einigen Domains existieren. Dies ist als Unterstützung für Internationale Domain Namen (IDN) bekannt. Standardmäßig ist das eingeschaltet. Das kann aber ausgeschaltet werden indem eine Einstellung geändert wird über das interne Zend_Validate_Hostname Objekt das innerhalb von Zend_Validate_EmailAddress existiert.
$validator->hostnameValidator->setValidateIdn(false);
setValidateIdn() gibt es
in der Zend_Validate_Hostname Dokumentation.
Es sollte darauf geachtet werden das IDNs nur geprüft werden wenn erlaubt ist DNS Hostnamen zu prüfen.
Top Level Domains prüfen
Standardmäßig wird ein Hostname mit einer List von bekannten TLDs geprüft. Das ist standardmäßig aktiviert, kann aber ausgeschaltet werden indem die Einstellung über das interne Zend_Validate_Hostname geändert wird, das innerhalb von Zend_Validate_EmailAddress existiert.
$validator->hostnameValidator->setValidateTld(false);
setValidateTld() gibt es in der
Zend_Validate_Hostname Dokumentation.
Es sollte darauf geachtet werden das TLDs nur geprüft werden wenn es auch erlaubt ist DNS Hostnamen zu prüfen.
Float
Gibt nur dann true zurück wenn $value ein Fließkomma Wert ist.
Seit Zend Framework 1.8 verwendet diese Prüfung auch das aktuelle Gebietsschema des
Browsers, der Umgebung oder eines anwendungsweit gesetzten Gebietsschemas. Man kann
natürlich die Zugriffsmethoden get/setLocale verwenden um das verwendete Gebietsschema
zu verändern oder es bei der Erstellung einer Instanz dieser Prüfung angeben.
GreaterThan
Gibt nur dann true zurück wenn $value größer als die Minimale
Grenze ist.
Hex
Gibt nur dann true zurück wenn $value nur Hexadezimale
Digitale Zeichen enthält.
Hostname
Zend_Validate_Hostname erlaubt die Prüfung von Hostnamen mit einem Set von bekannten Spezifikationen. Es ist möglich drei verschiedene Typen von Hostnamen zu Prüfen: einen DNS Hostnamen (z.b. domain.com), IP Adressen (z.B. 1.2.3.4), und lokale Hostnamen (z.B. localhost). Standarmäßig werden nur DNS Hostnamen geprüft.
Normale Verwendung
Ein normales Beispiel der Verwendung ist anbei:
$validator = new Zend_Validate_Hostname();
if ($validator->isValid($hostname)) {
// Hostname scheint gültig zu sein
} else {
// Hostname ist ungülig; Gründe dafür ausdrucken
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
$hostname und wird einen Fehler über
$validator->getMessages() mit einer nützlichen Fehlermeldung
auswerfen.
Verschiedene Typen von Hostnamen prüfen
Es kann gewünscht sein auch IP Adressen, lokale Hostnamen, oder eine Kombination aller drei erlaubten Typen zu prüfen. Das kann gemacht werden durch die Übergabe eines Parameters an Zend_Validate_Hostname wenn dieser initialisiert wird. Der Parameter sollte ein Integer sein, welcher die Typen von Hostnamen auswählt die erlaubt sind. Hierfür können die Zend_Validate_Hostname Konstanten verwendet werden.
Die Zend_Validate_Hostname Konstanten sind: ALLOW_DNS um nur DNS Hostnamen zu
erlauben, ALLOW_IP um IP Adressen zu erlauben, ALLOW_LOCAL um
lokale Hostnamen zu erlauben, und ALLOW_ALL um alle drei Typen zu erlauben. Um
nur IP Adressen zu prüfen kann das folgende Beispiel verwendet werden:
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
if ($validator->isValid($hostname)) {
// Hostname scheint gültig zu sein
} else {
// Hostname ist ungülig; Gründe dafür ausdrucken
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
Genau wie die Verwendung von ALLOW_ALL alle Typen von Hostnamen akzeptiert,
können diese Typen kombiniert werden um Kombinationen zu erlauben. Um zum Beispiel DNS
und lokale Hostnamen zu akzeptieren muß das Zend_Validate_Hostname Objekt wie folgt
initialisiert werden:
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS |
Zend_Validate_Hostname::ALLOW_IP);
Internationale Domain Namen prüfen
Einige Länder Code Top Level Domains (ccTLDs), wie 'de' (Deutschland), unterstützen internationale Zeichen in Domain Namen. Diese sind als Internationale Domain Namen (IDN) bekannt. Diese Domains können mit Zend_Validate_Hostname geprüft werden, mit Hilfe von erweiterten Zeichen die im Prüfprozess verwendet werden.
Zur Zeit beinhaltet die Liste der unterstützten ccTLDs:
-
at (Österreich)
-
ch (Schweiz)
-
li (Liechtenstein)
-
de (Deutschland)
-
fi (Finnland)
-
hu (Ungarn)
-
no (Norwegen)
-
se (Schweden)
Eine IDN Domain zu prüfen ist genauso einfach wie die Verwendung des standard Hostnamen
Prüfers da IDN Prüfung standardmäßig eingeschaltet ist. Wenn IDN Prüfung ausgeschaltet
werden soll, kann das entweder durch die Übergabe eines Parameters im Zend_Validate_Hostname
Konstruktor, oder über die $validator->setValidateIdn() Methode gemacht werden.
Die IDN Prüfung kann ausgeschaltet werden durch die Übergabe eines zweiten Parameters an den Zend_Validate_Hostname Konstruktor auf die folgende Art und Weise.
$validator =
new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS, false);
$validator->setValidateIdn()
übergeben werden, um die IDN Prüfung ein- oder auszuschalten.
Wenn ein IDN Hostname geprüft wird, der aktuell nicht unterstützt wird, ist es sicher das
die Prüfung fehlschlagen wird wenn er irgendwelche internationalen Zeichen hat. Wo keine
ccTLD Datei in Zend/Validate/Hostname existiert, welche die zusätzlichen Zeichen definiert,
wird eine normale Hostnamen Prüfung durchgeführt.
Es sollte beachtet werden das IDNs nur geprüft werden wenn es erlaubt ist DNS Hostnamen zu prüfen.
Top Leven Domains prüfen
Normalerweise wird ein Hostname gegen eine Liste von bekannten TLDs geprüft. Wenn diese Funktionalität nicht benötigt wird kann das, auf die gleiche Art und Weise wie die IDN Unterstützung, ausgeschaltet werden Die TLD Prüfung kann ausgeschaltet werden indem ein dritter Parameter an den Zend_Validate_Hostname Konstruktor übergeben wird. Im folgenden Beispiel wird die IDN Prüfung durch den zweiten Parameter unterstützt.
$validator =
new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS,
true,
false);
$validator->setValidateTld() übergeben werden um die TLD Prüfung ein- oder
auszuschalten.
Es sollte beachtet werden das TLDs nur geprüft werden wenn es erlaubt ist DNS Hostnamen zu prüfen.
Iban
Gibe nur dann true zurück wenn $value eine gültige IBAN
(Internationale Bank Account Nummer) enthält. IBAN Nummern werden gegen ein Land geprüft
in dem Sie verwendet werden und durch eine Checksumme.
Es gibt zwei Wege um IBAN Nummern zu prüfen. Als ersten Weg kann man ein Gebietsschema angeben das das Land repräsentiert. Jede angegebene IBAN Nummer wird das gegen dieses Land geprüft.
$validator = new Zend_Validate_Iban('de_AT');
$iban = 'AT611904300234573201';
if ($validator->isValid($iban)) {
// IBAN scheint gültig zu sein
} else {
// IBAN ist ungültig
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
Das sollte man tun wenn man IBAN Nummern gegen ein einzelnes Land prüfen will. Der einfachere Weg der Prüfung ist es kein Gebietsschema anzugeben wie im nächsten Beispiel gezeigt.
$validator = new Zend_Validate_Iban();
$iban = 'AT611904300234573201';
if ($validator->isValid($iban)) {
// IBAN scheint gültig zu sein
} else {
// IBAN ist ungültig
}
Aber das zeigt ein großes Problem: Wenn man nur IBAN Nummern von einem einzelnen Land akzeptieren darf, zum Beispiel Frankreich, sind auch die IBAN Nummer von anderen Ländern gültig. Deshalb als Erinnerung: Wenn man IBAN Nummern gegen ein definiertes Land zu prüfen hat, sollte man ein Gebietsschema angeben. Und wenn man alle IBAN Nummern akzeptieren will unabhängig von irgendeinem Land kann der Einfachheit halber das Gebietsschema unterdrückt werden.
InArray
Gibt nur dann true zurück wenn ein "needle" $value in einem
"haystack" Array enthalten ist. Wenn die Strict Option true ist, wird der
Typ von $value auch geprüft.
Int
Gibt nur dann true zurück wenn $value ein gültiger Integer
ist. Seit Zend Framework 1.8 verwendet diese Prüfung auch das aktuelle Gebietsschema des
Browsers, der Umgebung oder eines anwendungsweit gesetzten Gebietsschemas. Man kann
natürlich die Zugriffsmethoden get/setLocale verwenden um das verwendete Gebietsschema
zu verändern oder es bei der Erstellung einer Instanz dieser Prüfung angeben.
Ip
Gibt nur dann true zurück wenn $value eine gültige IP Adresse
ist.
LessThan
Gibt nur dann true zurück wenn $value kleiner als die Maximale
Grenze ist.
NotEmpty
Gibt nur dann true zurück wenn $value kein leerer Wert ist.
Regex
Gibt nur dann true zurück wenn $value mit einem Regular
Expression Pattern geprüft werden kann.
Sitemap Prüfungen
Die folgenden Prüfungen entsprechen dem » Sitemap XML Protokoll.
Sitemap_Changefreq
Prüft ob ein String gültig ist um Ihn als 'changefreq' Element in einem Sitemap XML Dokument zu verwenden. Gültige Elemente sind: 'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', oder 'never'.
Gibt true zurück wenn und nur wenn der Wert ein String ist und mit einer
der oben spezifizierten Frequenzen übereinstimmt.
Sitemap_Lastmod
Prüft ob ein String gültig ist um Ihn als 'lastmod' Element in einem Sitemap XML Dokument zu verwenden. Das lastmod Element sollte einen W3C Datumsstring enthalten, und optional Informationen über die Zeit enthalten.
Gibt true zurück wenn, und nur wenn, der angegebene Wert ein String und
in Bezug auf das Prokoll gültig ist.
Beispiel #1 Sitemap Lastmod Prüfung
$validator = new Zend_Validate_Sitemap_Lastmod();
$validator->isValid('1999-11-11T22:23:52-02:00'); // true
$validator->isValid('2008-05-12T00:42:52+02:00'); // true
$validator->isValid('1999-11-11'); // true
$validator->isValid('2008-05-12'); // true
$validator->isValid('1999-11-11t22:23:52-02:00'); // false
$validator->isValid('2008-05-12T00:42:60+02:00'); // false
$validator->isValid('1999-13-11'); // false
$validator->isValid('2008-05-32'); // false
$validator->isValid('yesterday'); // false
Sitemap_Loc
Prüft ob ein String für die Verwendung als 'loc' Element in einem Sitemap XML Dokument gültig ist. Er verwendet intern Zend_Form::check(). Mehr darüber kann man unter URI Prüfung lesen.
Sitemap_Priority
Prüft ob ein Wert für die Verwendung als 'priority' Element in einem Sitemap XML Dokument gültig ist. Der Wert sollte ein Dezimalwert zwischen 0.0 und 1.0 sein. Diese Prüfung akzeptiert sowohl nummerische Werte als auch Stringwerte.
Beispiel #2 Sitemap Priority Prüfung
$validator = new Zend_Validate_Sitemap_Priority();
$validator->isValid('0.1'); // true
$validator->isValid('0.789'); // true
$validator->isValid(0.8); // true
$validator->isValid(1.0); // true
$validator->isValid('1.1'); // false
$validator->isValid('-0.4'); // false
$validator->isValid(1.00001); // false
$validator->isValid(0xFF); // false
$validator->isValid('foo'); // false
StringLength
Gibt nur dann true zurück wenn die Länge des Strings von
$value mindstens ein Minimum und nicht größer als ein Maximum ist (wenn die
max Option nicht null ist). Wirft die setMin() Methode eine
Ausnahme wenn die minimale Länge auf einen größeren Wert gesetzt wird als die maximale
Länge, und die setMax() Methode wirft eine Ausnahme wenn die maximale Länge
auf einen kleineren Wert als die minimale Länge gesetzt wird. Seit Version 1.0.2
unterstützt diese Klasse UTF-8 und andere Zeichensätze, basierend auf dem aktuellen Wert
von » iconv.internal_encoding.
Wenn man ein anderes Encoding benötigt kann man es mit den Zugriffsmethoden getEncoding
und setEncoding setzen.
| Einführung |
