Introduction to Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 96.1% Update 2010-11-28 - Revision 23448 - Version ZF 1.11.x

    Chapter 75. Zend_Validate

    Table of Contents

    75.1. Einführung
    75.1.1. Was ist eine Prüfung?
    75.1.2. Standardnutzung von Prüfungen
    75.1.3. Nachrichten anpassen
    75.1.4. Verwenden der statischen is() Methode
    75.1.4.1. Namespaces
    75.1.5. Meldungen übersetzen
    75.2. Standard Prüfklassen
    75.2.1. Alnum
    75.2.1.1. Unterstützte Optionen für Zend_Validate_Alnum
    75.2.1.2. Standardverhalten
    75.2.1.3. Verwendung von Leerzeichen
    75.2.1.4. Andere Sprachen verwenden
    75.2.2. Alpha
    75.2.2.1. Unterstützte Optionen für Zend_Validate_Alpha
    75.2.2.2. Standardverhalten
    75.2.2.3. Verwendung von Leerzeichen
    75.2.2.4. Andere Sprachen verwenden
    75.2.3. Barcode
    75.2.3.1. Unterstützte Optionen für Zend_Validate_Barcode
    75.2.3.2. Grundsätzliche Verwendung
    75.2.3.3. Optionale Checksumme
    75.2.3.4. Schreiben eigener Adapter
    75.2.4. Between
    75.2.4.1. Unterstützte Optionen für Zend_Validate_Between
    75.2.4.2. Standardverhalten für Zend_Validate_Between
    75.2.4.3. Prüfung exklusive den Grenzwerten
    75.2.5. Callback
    75.2.5.1. Unterstützte Optionen für Zend_Validate_Callback
    75.2.5.2. Grundsätzliche Verwendung
    75.2.5.3. Verwendung mit Closures
    75.2.5.4. Verwendung mit klassenbasierten Callbacks
    75.2.5.5. Optionen hinzufügen
    75.2.6. CreditCard
    75.2.6.1. Unterstützte Optionen für Zend_Validate_CreditCard
    75.2.6.2. Grundsätzliche Verwendung
    75.2.6.3. Definierte Kreditkarte akzeptieren
    75.2.6.4. Prüfung durch Verwendung einer fremden API
    75.2.7. Ccnum
    75.2.8. Date
    75.2.8.1. Unterstützte Optionen für Zend_Validate_Date
    75.2.8.2. Standardmäßige Datumsprüfung
    75.2.8.3. Lokalisierte Datumsprüfung
    75.2.8.4. Selbst definierte Datumsprüfung
    75.2.9. Db_RecordExists und Db_NoRecordExists
    75.2.9.1. Unterstützte Optionen für Zend_Validate_Db_*
    75.2.9.2. Grundsätzliche Verwendung
    75.2.9.3. Ausnehmen von Einträgen
    75.2.9.4. Datenbank Adapter
    75.2.9.5. Datenbank Schemas
    75.2.10. Digits
    75.2.10.1. Unterstützte Optionen für Zend_Validate_Digits
    75.2.10.2. Prüfen von Ziffern
    75.2.11. Email Adresse
    75.2.11.1. Normale Verwendung
    75.2.11.2. Optionen für die Prüfung von Email Adressen
    75.2.11.3. Komplexe lokale Abschnitte
    75.2.11.4. Nur den lokalen Teil prüfen
    75.2.11.5. Prüfen von unterschiedlichen Typen von Hostnamen
    75.2.11.6. Prüfen ob der Hostname aktuell Emails akzeptiert
    75.2.11.7. Internationale Domain Namen prüfen
    75.2.11.8. Top Level Domains prüfen
    75.2.11.9. Setzen von Meldungen
    75.2.12. Float
    75.2.12.1. Unterstützte Optionen für Zend_Validate_Float
    75.2.12.2. Einfache Float Prüfung
    75.2.12.3. Lokalisierte Prüfung von Gleitkommazahlen
    75.2.13. GreaterThan
    75.2.13.1. Unterstützte Optionen für Zend_Validate_GreaterThan
    75.2.13.2. Normale Verwendung
    75.2.14. Hex
    75.2.14.1. Unterstützte Optionen für Zend_Validate_Hex
    75.2.15. Hostname
    75.2.15.1. Unterstützte Optionen für Zend_Validate_Hostname
    75.2.15.2. Normale Verwendung
    75.2.15.3. Verschiedene Typen von Hostnamen prüfen
    75.2.15.4. Internationale Domain Namen prüfen
    75.2.15.5. Top Level Domains prüfen
    75.2.16. Iban
    75.2.16.1. Unterstützte Optionen für Zend_Validate_Iban
    75.2.16.2. IBAN Prüfung
    75.2.16.2.1. Anwendungsweites Gebietsschema
    75.2.16.2.2. Unscharfe IBAN Prüfung
    75.2.16.2.3. Gebietsschema verwendende IBAN Prüfung
    75.2.17. Identical
    75.2.17.1. Unterstützte Optionen für Zend_Validate_Identical
    75.2.17.2. Grundsätzliche Verwendung
    75.2.17.3. Identische Objekte
    75.2.17.4. Formular Elemente
    75.2.17.5. Strikte Prüfung
    75.2.17.6. Konfiguration
    75.2.18. InArray
    75.2.18.1. Unterstützte Optionen für Zend_Validate_InArray
    75.2.18.2. Einfache Array Prüfung
    75.2.18.3. Strikte Array Prüfung
    75.2.18.4. Rekursive Array Prüfung
    75.2.19. Int
    75.2.19.1. Unterstützte Optionen für Zend_Validate_Int
    75.2.19.2. Einfache Integer Prüfung
    75.2.19.3. Lokalisierte Integer Prüfung
    75.2.20. Isbn
    75.2.20.1. Unterstützte Optionen für Zend_Validate_Isbn
    75.2.20.2. Einfache Verwendung
    75.2.20.3. Einen expliziten ISBN Prüfungstyp setzen
    75.2.20.4. Eine Begrenzung auf ein Trennzeichen spezifizieren
    75.2.21. Ip
    75.2.21.1. Unterstützte Optionen für Zend_Validate_Ip
    75.2.21.2. Grundsätzliche Verwendung
    75.2.21.3. IPv4 oder IPv6 alleine prüfen
    75.2.22. LessThan
    75.2.22.1. Unterstützte Optionen für Zend_Validate_LessThan
    75.2.22.2. Normale Verwendung
    75.2.23. NotEmpty
    75.2.23.1. Unterstützte Optionen für Zend_Validate_NotEmpty
    75.2.23.2. Standardverhalten für Zend_Validate_NotEmpty
    75.2.23.3. Ändern des Verhaltens für Zend_Validate_NotEmpty
    75.2.24. PostCode
    75.2.24.1. Optionen des Constructors
    75.2.24.2. Unterstützte Optionen für Zend_Validate_PostCode
    75.2.25. Regex
    75.2.25.1. Unterstützte Optionen für Zend_Validate_Regex
    75.2.25.2. Prüfen mit Zend_Validate_Regex
    75.2.25.3. Handhabung von Pattern
    75.2.26. Sitemap Prüfungen
    75.2.26.1. Sitemap_Changefreq
    75.2.26.2. Sitemap_Lastmod
    75.2.26.3. Sitemap_Loc
    75.2.26.4. Sitemap_Priority
    75.2.26.5. Unterstützte Optionen für Zend_Validate_Sitemap_*
    75.2.27. StringLength
    75.2.27.1. Unterstützte Optionen für Zend_Validate_StringLength
    75.2.27.2. Standardverhalten für Zend_Validate_StringLength
    75.2.27.3. Die maximal erlaubte Länge eines String begrenzen
    75.2.27.4. Die mindestens benötigte Länge eines Strings begrenzen
    75.2.27.5. Einen String auf beiden Seiten begrenzen
    75.2.27.6. Kodierung von Werten
    75.3. Kettenprüfungen
    75.4. Schreiben von Prüfern
    75.5. Prüfungsmeldungen
    75.5.1. Verwendung vor-übersetzter Prüfungsmeldungen
    75.5.2. Begrenzen der Größe einer Prüfungsmeldung

    75.1. Einführung

    Die Komponente Zend_Validate bietet ein Reihe von häufig benötigten Prüfungen. Sie bietet auch einen einfachen Verkettungsmechanismus für Prüfungen, mit welchem mehrfache Prüfungen in einer benutzerdefinierten Reihenfolge auf einen einzelnen Wert angewendet werden können.

    75.1.1. Was ist eine Prüfung?

    Eine Prüfung untersucht ihre Eingabe hinsichtlich einiger Anforderungen und produziert ein boolesches Ergebnis - wenn die Eingabe erfolgreich gegen die Anforderungen geprüft werden konnte. Wenn die Eingabe den Anforderungen nicht entspricht, kann die Prüfung zusätzliche Informationen darüber bieten, welche der Anforderungen die Eingabe nicht entspricht.

    Zum Beispiel könnte eine Webanwendung erfordern, dass ein Benutzername zwischen sechs und zwölf Zeichen lang sein soll und nur alphanumerische Zeichen enthalten soll. Eine Prüfung kann dafür verwendet werden um sicherzustellen, dass Benutzernamen diesen Anforderungen entsprechen. Wenn ein gewählter Benutzername einer oder beiden Anforderungen nicht entspricht, wäre es nützlich zu wissen, welche der Anforderungen der Benutzername nicht entsprochen hat.

    75.1.2. Standardnutzung von Prüfungen

    Prüfungen auf diesem Weg definiert zu haben, bietet die Grundlage für Zend_Validate_Interface, welche zwei Methoden definiert, isValid() und getMessages(). Die Methode isValid() führt eine Prüfung über die angegebenen Werte aus und gibt nur dann TRUE zurück, wenn der Wert gegenüber den Kriterien der Prüfung entsprochen hat.

    Wenn isValid() FALSE zurück gibt, bietet getMessages() ein Array von Nachrichten, welches die Gründe für die fehlgeschlagene Prüfung beschreiben. Die Arrayschlüssel sind kurze Strings, welche die Gründe für eine fehlgeschlagene Prüfung identifizieren und die Arraywerte sind die entsprechend menschenlesbaren String-Nachrichten. Die Schlüssel und Werte sind klassenabhängig; jede Prüfklasse definiert ihr eigenes Set von Nachrichten für fehlgeschlagene Prüfungen und die eindeutigen Schlüssel, welche diese identifizieren. Jede Klasse hat also eine const Definition die jedem Identifikator für eine fehlgeschlagene Prüfung entspricht.

    [Note] Note

    Die Methode getMessages() gibt die Information für Prüfungsfehler nur für den zuletzt durchgeführten Aufruf von isValid() zurück. Jeder Aufruf von isValid() löscht jegliche Nachricht und Fehler, welche durch vorhergehende Aufrufe von isValid() vorhanden waren, weil normalerweise jeder Aufruf von isValid() für einen unterschiedlichen Eingabewert gemacht wird.

    Das folgende Beispiel zeigt die Prüfung einer E-Mail Adresse:

    $validator = new Zend_Validate_EmailAddress();

    if (
    $validator->isValid($email)) {
        
    //
        // E-Mail scheint gültig zu sein
        //
    } else {
        
    //
        // E-Mail ist ungültig; drucke die Gründe
        //
        
    foreach ($validator->getMessages() as $messageId => $message) {
            echo 
    "Validation failure '$messageId': $message\n";
        }
    }

    75.1.3. Nachrichten anpassen

    Prüfklassen bieten eine Methode setMessage(), mit der das Format der Nachricht definiert werden kann, die von getMessages() im Fall einer fehlerhaften Prüfung zurückgegeben wird. Das erste Argument dieser Methode ist ein String, der die Fehlernachricht enthält. Es können Kürzel in den String eingebaut werden, welche mit den für die Prüfung relevanten Daten aufgefüllt werden. Das Kürzel %value% wird von allen Prüfungen unterstützt; es ist verbunden mit dem Wert der an isValid() übergeben wird. Andere Kürzel können in jeder Prüfklasse von Fall zu Fall unterstützt werden. Zum Beispiel ist %max% das Kürzel, welches von Zend_Validate_LessThan unterstützt wird. Die getMessageVariables() Methode gibt ein Array von variablen Kürzeln zurück, welche vom Prüfer unterstützt werden.

    Das zweite optionale Argument ist ein String, der das Template der fehlerhaften Prüfnachricht identifiziert, die gesetzt werden soll. Das ist nützlich wenn eine Prüfklasse mehr als einen Grund für einen Fehlschlag definiert. Wenn das zweite Argument nicht angegeben wird, nimmt setMessage() an, dass die spezifizierte Nachricht für das erste Messagetemplate verwendet werden soll, das in der Prüfklasse definiert ist. Viele Prüfklassen haben nur ein Template für eine Fehlernachricht definiert, sodass es nicht notwendig ist anzugeben, welches Template für Fehlernachrichten geändert werden soll.

    $validator = new Zend_Validate_StringLength(8);

    $validator->setMessage(
        
    'Der String \'%value%\' ist zu kurz; er muss mindestens %min% ' .
        
    'Zeichen sein',
        
    Zend_Validate_StringLength::TOO_SHORT);

    if (!
    $validator->isValid('word')) {
        
    $messages $validator->getMessages();
        echo 
    $messages[0];

        
    // "Der String 'word' ist zu kurz; er muss mindestens 8 Zeichen sein"
    }

    Es können mehrere Nachrichten durch Verwendung der Methode setMessages() gesetzt werden. Dessen Argument ist ein Array, welches Schlüssel/Nachrichten Paare enthält.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));

    $validator->setMessages( array(
        
    Zend_Validate_StringLength::TOO_SHORT =>
            
    'Der String \'%value%\' ist zu kurz',
        
    Zend_Validate_StringLength::TOO_LONG  =>
            
    'Der String \'%value%\' ist zu lang'
    ));

    Wenn die Anwendung mehr Flexibilität benötigt in der Art und Weise wie Prüffehler gemeldet werden, kann auf die Eigenschaften durch denselben Namen zugegriffen werden, wie mit dem Nachrichtenkürzel, das von einer Prüfklasse unterstützt wird. Die Eigenschaft value ist immer in einem Prüfer vorhanden; Das ist der Wert, der als Argument von isValid() definiert wurde. Andere Eigenschaften können von Fall zu Fall in jeder Prüfklasse unterstützt werden.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));

    if (!
    validator->isValid('word')) {
        echo 
    'Wort fehlgeschlaten: '
            
    $validator->value
            
    '; die Länge ist nicht zwischen '
            
    $validator->min
            
    ' und '
            
    $validator->max
            
    "\n";
    }

    75.1.4. Verwenden der statischen is() Methode

    Wenn es unpassend ist, eine gegebenen Prüfklasse zu laden und eine Instanz des Prüfers zu erstellen, kann die statische Methode Zend_Validate::is() als alternativer Stil des Aufrufs verwendet werden. Das erste Argument dieser Methode ist ein Datenwert, der an die Methode isValid() übergeben werden würde. Das zweite Argument ist ein String, welcher mit dem Basisnamen der Prüfklasse übereinstimmt, relativ zum Namensraum von Zend_Validate. Die Methode is() lädt die Klasse automatisch, erstellt eine Instanz und wendet die Methode isValid() auf die Eingabedaten an.

    if (Zend_Validate::is($email'EmailAddress')) {
        
    // Ja, die Email Adresse scheint gültig zu sein
    }

    Es kann auch ein Array von Konstruktor-Argumenten übergeben werden, wenn diese für die Prüfung benötigt werden.

    if (Zend_Validate::is($value'Between', array('min' => 1'max' => 12))) {
        
    // Ja, $value ist zwischen 1 und 12
    }

    Die Methode is() gibt einen booleschen Wert zurück, denselben wie die Methode isValid(). Wird die statische Methode is() verwendet, sind Nachrichten für Prüffehler nicht vorhanden.

    Die statische Verwendung kann für das ad hoc Verwenden eines Prüfers bequem sein, aber wenn ein Prüfer für mehrere Eingaben verwendet werden soll, ist es effizienter die nicht statische Verwendung zu benutzen, indem eine Instanz des Prüfobjekts erstellt wird und dessen Methode isValid() aufgerufen wird.

    Die Klasse Zend_Filter_Input erlaubt es, auch mehrfache Filter und Prüfklassen zu instanzieren und bei Bedarf aufzurufen, um Sets von Eingabedaten zu bearbeiten. Siehe Zend_Filter_Input.

    75.1.4.1. Namespaces

    Wenn man mit selbst definierten Prüfungen arbeitet, dann kann man an Zend_Validate::is() einen vierten Parameter übergeben welcher der Namespace ist, an dem die eigene Prüfung gefunden werden kann.

    if (Zend_Validate::is($value'MyValidator', array('min' => 1'max' => 12),
                          array(
    'FirstNamespace''SecondNamespace')) {
        
    // Ja, $value ist in Ordnung
    }

    Zend_Validate erlaubt es auch, standardmäßige Namespaces zu setzen. Das bedeutet, dass man sie einmal in der Bootstrap setzt und sie nicht mehr bei jedem Aufruf von Zend_Validate::is() angeben muss. Der folgende Codeschnipsel ist identisch mit dem vorherigen.

    Zend_Validate::setDefaultNamespaces(array('FirstNamespace''SecondNamespace'));
    if (
    Zend_Validate::is($value'MyValidator', array('min' => 1'max' => 12)) {
        
    // Yes, $value is ok
    }

    if (
    Zend_Validate::is($value,
                          
    'OtherValidator',
                          array(
    'min' => 1'max' => 12)) {
        
    // Yes, $value is ok
    }

    Der Bequemlichkeit halber gibt es die folgenden Methoden, welche die Behandlung von Namespaces erlauben:

    • Zend_Validate::getDefaultNamespaces(): Gibt alle standardmäßigen Namespaces als Array zurück.

    • Zend_Validate::setDefaultNamespaces(): Setzt neue standardmäßige Namespaces und überschreibt alle vorher gesetzten. Es wird entweder ein String für einen einzelnen Namespace akzeptiert oder ein Array für mehrere Namespaces.

    • Zend_Validate::addDefaultNamespaces(): Fügt zusätzliche Namespaces zu den bereits gesetzten hinzu. Es wird entweder ein String für einen einzelnen Namespace akzeptiert oder ein Array für mehrere Namespaces.

    • Zend_Validate::hasDefaultNamespaces(): Gibt TRUE zurück, wenn ein oder mehrere standardmäßige Namespaces gesetzt sind und FALSE, wenn keine standardmäßigen Namespaces gesetzt sind.

    75.1.5. Meldungen übersetzen

    Prüfungsklassen bieten eine Methode setTranslator(), mit der man eine Instanz von Zend_Translate definieren kann, die Nachrichten im Falle eines Prüfungsfehlers übersetzt. Die getTranslator() Methode gibt die gesetzte Übersetzungsinstanz zurück.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));
    $translate = new Zend_Translate(
        array(
            
    'adapter' => 'array',
            
    'content' => array(
                
    Zend_Validate_StringLength::TOO_SHORT => 'Übersetzt \'%value%\''
            
    ),
            
    'locale'  => 'en'
        
    )
    );

    $validator->setTranslator($translate);

    Mit der statischen Methode setDefaultTranslator() kann eine Instanz von Zend_Translate gesetzt werden und mit getDefaultTranslator() empfangen. Das verhindert, dass man den Übersetzer manuell für alle Prüfungsklassen setzen muss und vereinfacht den Code.

    $translate = new Zend_Translate(
        array(
            
    'adapter' => 'array',
            
    'content' => array(
                
    Zend_Validate_StringLength::TOO_SHORT => 'Übersetzt \'%value%\''
            
    ),
            
    'locale'  => 'en'
        
    )
    );
    Zend_Validate::setDefaultTranslator($translate);
    [Note] Note

    Wenn man ein anwendungsweites Gebietsschema in der Registry gesetzt hat, wird dieses Gebietsschema als standardmäßiger Übersetzer verwendet.

    Manchmal ist es notwendig, den Übersetzer in einer Prüfklasse auszuschalten. Um das zu tun, kann die Methode setDisableTranslator() verwendet werden, welche einen booleschen Wert akzeptiert und translatorIsDisabled(), um den gesetzten Wert zu erhalten.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));
    if (!
    $validator->isTranslatorDisabled()) {
        
    $validator->setDisableTranslator();
    }

    Es ist auch möglich einen Übersetzer zu verwenden, statt eigene Meldungen mit setMessage() zu setzen. Aber wenn man das tut, sollte man im Kopf behalten, dass der Übersetzer auch mit den Meldungen arbeitet, die man selbst gesetzt hat.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...