Zend_Validate.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15742 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.validate.introduction">
  5. <title>Einführung</title>
  6. <para>
  7. Die Zend_Validate Komponente bietet ein Set von üblich verwendeten Prüfungen. Sie bietet
  8. auch einen einfachen Prüf-Ketten-Mechanismus mit welchem mehrfache Prüfungen zu einem
  9. einfachen Wert in einer benutzer-definierten Art und Weise zugeordnet werden können.
  10. </para>
  11. <sect2 id="zend.validate.introduction.definition">
  12. <title>Was ist eine Prüfung?</title>
  13. <para>
  14. Eine Prüfung untersucht seine Eingabe mit Obacht auf einige Anforderungen und produziert
  15. ein boolsches Ergebnis - wenn die Eingabe erfolgreich gegen die Anforderungen geprüft
  16. werden konnte. Wenn die Eingabe den Anforderungen nicht entspricht, kann die Prüfung
  17. zusätzliche Informationen darüber bieten, welche der Anforderungen die Eingabe nicht
  18. entspricht.
  19. </para>
  20. <para>
  21. Eine WebAnwendung, zum Beispiel, könnte erfordern das ein Benutzername zwischen sechs
  22. und zwölf Zeichen lang ist und dürfte nur alphanummerische Zeichen enthalten. Eine
  23. Prüfung kann dafür verwendet werden um sicherzustellen das Benutzernamen diesen
  24. Anforderungen entsprechen. Wenn ein gewählter Benutzername einer oder beiden
  25. Anforderungen nicht entspricht, wäre es nützlich zu wissen welche der Anforderungen der
  26. Benutzername nicht entsprochen hat.
  27. </para>
  28. </sect2>
  29. <sect2 id="zend.validate.introduction.using">
  30. <title>Standardnutzung von Prüfungen</title>
  31. <para>
  32. Prüfungen auf diesem Weg definiert zu haben, bietet die Sammlung für
  33. <classname>Zend_Validate_Interface</classname> welche zwei Methoden definiert,
  34. <code>isValid()</code> und <code>getMessages()</code>. Die <code>isValid()</code>
  35. Methode führt eine Prüfung über die angegebenen Werte aus, und gibt nur dann
  36. <constant>TRUE</constant> zurück wenn der Wert gegenüber den Kriterien der Prüfung entsprochen
  37. hat.
  38. </para>
  39. <para>
  40. Wenn <code>isValid()</code> <constant>FALSE</constant> zurück gibt, bietet
  41. <code>getMessages()</code> ein Array von Nachrichten welche die Gründe für die
  42. fehlgeschlagene Prüfung beschreiben. Die Arrayschlüssel sind kurze Strings die die
  43. Gründe für eine fehlgeschlagene Prüfung identifizieren, und die Arraywerte sind die
  44. entsprechend menschlich-lesbaren String Nachrichten. Die Schlüssel und Werte sind
  45. Klassenabhängig; jede Prüfklasse definiert Ihr eigenes Set von Nachrichten für
  46. fehlgeschlagene Prüfungen und die eindeutigen Schlüssel die diese identifizieren. Jede
  47. Klasse hat also eine <code>const</code> Definition die jedem Identifikator für eine
  48. fehlgeschlagene Prüfung entspricht.
  49. </para>
  50. <note>
  51. <para>
  52. Die <code>getMessages()</code> gibt die Information für Prüfungsfehler nur für den
  53. zuletzt durchgeführten Aufruf von <code>isValid()</code> zurück. Jeder Aufruf von
  54. <code>isValid()</code> löscht jegliche Nachricht und Fehler welche durch
  55. vorhergehende <code>isValid()</code> Aufrufe vorhanden waren, weil normalerweise
  56. jeder Aufruf von <code>isValid()</code> für einen unterschiedlichen Eingabewert
  57. gemacht wird.
  58. </para>
  59. </note>
  60. <para>
  61. Das folgende Beispiel zeigt die Prüfung einer E-Mail Adresse:
  62. <programlisting language="php"><![CDATA[
  63. $validator = new Zend_Validate_EmailAddress();
  64. if ($validator->isValid($email)) {
  65. //
  66. // E-Mail scheint gültig zu sein
  67. //
  68. } else {
  69. //
  70. // E-Mail ist ungültig; drucke die Gründe
  71. //
  72. foreach ($validator->getMessages() as $messageId => $message) {
  73. echo "Validation failure '$messageId': $message\n";
  74. }
  75. }
  76. ]]></programlisting>
  77. </para>
  78. </sect2>
  79. <sect2 id="zend.validate.introduction.messages">
  80. <title>Nachrichten anpassen</title>
  81. <para>
  82. Prüf Klassen bieten eine <code>setMessage()</code> Methode mit der das Format der
  83. Nachricht definiert werden kann die von <code>getMessages()</code> im Fall einer
  84. fehlerhaften Prüfung zurückgegeben wird. Das erste Argument dieser Methode ist ein
  85. String der die Fehlernachricht enthält. Es können Kürzel in den String eingebaut werden
  86. welche mit den für die Prüfung relevanten Daten aufgefüllt werden. Das Kürzel
  87. <code>%value%</code> wird von allen Prüfungen unterstützt; es ist verbunden mit dem Wert
  88. der an <code>isValid()</code> übergeben wird. Andere Kürzel können unterstützt werden
  89. von Fall-zu-Fall in jeder Prüfer-Klasse. Zum Beispiel ist <code>%max%</code> das Kürzel
  90. welches von <classname>Zend_Validate_LessThan</classname> unterstützt wird. Die
  91. <code>getMessageVariables()</code> Methode give ein Array von variablen Kürzel zurück
  92. welche vom Prüfer unterstützt werden.
  93. </para>
  94. <para>
  95. Das zweite optionale Argument ist ein String der das Template der fehlerhaften
  96. Prüfnachricht die gesetzt werden soll identifiziert. Das ist nützlich wenn eine
  97. Prüfklasse mehr als einen Grund für einen Fehlschlag definiert. Wenn das zweite Argument
  98. nicht angegeben wird, nimmt <code>setMessage()</code> an das die spezifizierte Nachricht
  99. für das erste Messagetemplate verwendet werden soll das in der Prüfklasse definiert ist.
  100. Viele Prüfklassen haben nur ein Template für eine Fehlernachricht definiert, sodas es
  101. nicht notwendig ist anzugeben welches Template für Fehlernachrichten geändert werden
  102. soll.
  103. </para>
  104. <para>
  105. <programlisting language="php"><![CDATA[
  106. $validator = new Zend_Validate_StringLength(8);
  107. $validator->setMessage(
  108. 'Der String \'%value%\' ist zu kurz; er muss mindestens %min% ' .
  109. 'Zeichen sein',
  110. Zend_Validate_StringLength::TOO_SHORT);
  111. if (!$validator->isValid('word')) {
  112. $messages = $validator->getMessages();
  113. echo $messages[0];
  114. // "Der String 'word' ist zu kurz; er muss mindestens 8 Zeichen sein"
  115. }
  116. ]]></programlisting>
  117. </para>
  118. <para>
  119. Es können mehrere Nachrichten gesetzt werden durch Verwendung der
  120. <code>setMessages()</code> Methode. Dessen Argument ist ein Array welches
  121. Schlüssel/Nachrichten Paare enthält.
  122. <programlisting language="php"><![CDATA[
  123. $validator = new Zend_Validate_StringLength(8, 12);
  124. $validator->setMessages( array(
  125. Zend_Validate_StringLength::TOO_SHORT =>
  126. 'Der String \'%value%\' ist zu kurz',
  127. Zend_Validate_StringLength::TOO_LONG =>
  128. 'Der String \'%value%\' ist zu lang'
  129. ));
  130. ]]></programlisting>
  131. </para>
  132. <para>
  133. Wenn die Anwendung mehr Flexibilität benötigt in der Art und Weise wie Prüffehler
  134. gemeldet werden, kann auf die Eigenschaften durch den selben Namen zugegriffen
  135. werden wie mit dem Nachrichten Kürzel das von einer Prüfklasse unterstützt wird.
  136. Die <code>value</code> Eigenschaft ist immer in einem Prüfer vorhanden; Das ist
  137. der Wert der als Argument von <code>isValid()</code> definiert wurde. Andere
  138. Eigenschaften können von Fall zu Fall in jeder Prüfklasse unterstützt werden.
  139. <programlisting language="php"><![CDATA[
  140. $validator = new Zend_Validate_StringLength(8, 12);
  141. if (!validator->isValid('word')) {
  142. echo 'Wort fehlgeschlaten: '
  143. . $validator->value
  144. . '; die Länge ist nicht zwischen '
  145. . $validator->min
  146. . ' und '
  147. . $validator->max
  148. . "\n";
  149. }
  150. ]]></programlisting>
  151. </para>
  152. </sect2>
  153. <sect2 id="zend.validate.introduction.static">
  154. <title>Verwenden der statischen is() Methode</title>
  155. <para>
  156. Wenn es nicht gebräuchlich ist eine gegebenen Prüfklasse zu laden und eine Instanz
  157. des Prüfers zu erstellen, kann die statische Methode
  158. <classname>Zend_Validate::is()</classname> verwendet werden als alternativer Stil des
  159. Aufrufs. Das erste Argument dieser Methode ist ein Datenwert, der an die
  160. <code>isValid()</code> Methode übergeben werden würde. Das zweite Argument ist ein
  161. String, welcher mit dem Basisnamen der Prüfklasse übereinstimmt, relativ zum Namensraum
  162. von <classname>Zend_Validate</classname>. Die <code>is()</code> Methode lädt die Klasse
  163. automatisch, erstellt eine Instanz und wendet die <code>isValid()</code> Methode an den
  164. Eingabedaten an.
  165. <programlisting language="php"><![CDATA[
  166. if (Zend_Validate::is($email, 'EmailAddress')) {
  167. // Ja, die Email Adresse scheint gültig zu sein
  168. }
  169. ]]></programlisting>
  170. </para>
  171. <para>
  172. Es kann auch ein Array von Konstruktor Argumenten übergeben werden, wenn diese für die
  173. Prüfung benötigt werden.
  174. <programlisting language="php"><![CDATA[
  175. if (Zend_Validate::is($value, 'Between', array(1, 12))) {
  176. // Ja, $value ist zwischen 1 und 12
  177. }
  178. ]]></programlisting>
  179. </para>
  180. <para>
  181. Die <code>is()</code> Methode gibt einen boolschen Wert zurück, denselben wie die
  182. <code>isValid()</code> Methode. Wird die statische <code>is()</code> Methode verwendet,
  183. sind Nachrichten für Prüffehler nicht vorhanden.
  184. </para>
  185. <para>
  186. Die statische Verwendung kann bequem sein für das ad hoc Verwenden eines Prüfers,
  187. aber wenn ein Prüfer für mehrere Eingaben verwendet werden soll ist es effizienter
  188. die nicht statische Verwendung zu benutzen, indem eine Instanz des Prüf Objektes
  189. erstellt wird und dessen <code>isValid()</code> Methode aufgerufen wird.
  190. </para>
  191. <para>
  192. Die <classname>Zend_Filter_Input</classname> Klasse erlaubt es auch mehrfache Filter und
  193. Prüfklassen zu instanzieren und bei Bedarf aufzurufen um Sets von Eingabedaten zu
  194. bearbeiten. Siehe <xref linkend="zend.filter.input" />.
  195. </para>
  196. </sect2>
  197. <sect2 id="zend.validate.introduction.translation">
  198. <title>Meldungen übersetzen</title>
  199. <para>
  200. Prüfungsklassen bieten eine <code>setTranslator()</code> Methode mit der man eine
  201. Instanz von <classname>Zend_Translate</classname> definieren kann die Nachrichten im
  202. Falle eines Prüfungsfehlers übersetzt. Die <code>getTranslator()</code> Methode gibt die
  203. gesetzte Übersetzungsinstanz zurück.
  204. </para>
  205. <programlisting language="php"><![CDATA[
  206. $validator = new Zend_Validate_StringLength(8, 12);
  207. $translate = new Zend_Translate(
  208. 'array',
  209. array(Zend_Validate_StringLength::TOO_SHORT => 'Übersetzt \'%value%\''),
  210. 'en'
  211. );
  212. $validator->setTranslator($translate);
  213. ]]></programlisting>
  214. <para>
  215. Mit der statischen Methode <code>setDefaultTranslator()</code> kann eine Instanz von
  216. <classname>Zend_Translate</classname> gesetzt werden, und mit
  217. <code>getDefaultTranslator()</code> empfangen. Das verhindert das man den Übersetzer
  218. manuell für alle Prüfungsklassen setzen muß und vereinfacht den Code.
  219. </para>
  220. <programlisting language="php"><![CDATA[
  221. $translate = new Zend_Translate(
  222. 'array',
  223. array(Zend_Validate_StringLength::TOO_SHORT => 'Übersetzt \'%value%\''),
  224. 'en'
  225. );
  226. Zend_Validate::setDefaultTranslator($translate);
  227. ]]></programlisting>
  228. <note>
  229. <para>
  230. Wenn man ein Anwendungsweites Gebietsschema in der Registry gesetzt hat, wird
  231. dieses Gebietsschema als standardmäßiger Übersetzer verwendet.
  232. </para>
  233. </note>
  234. <para>
  235. Machmal ist es notwendig den Übersetzer in einer Prüfklasse auszuschalten. Um das zu
  236. tun kann die <code>setDisableTranslator()</code> Methode verwendet werden, welche einen
  237. boolschen Wert akzeptiert und <code>translatorIsDisabled()</code> um den gesetzten
  238. Wert zu erhalten.
  239. </para>
  240. <programlisting language="php"><![CDATA[
  241. $validator = new Zend_Validate_StringLength(8, 12);
  242. if (!$validator->isTranslatorDisabled()) {
  243. $validator->setDisableTranslator();
  244. }
  245. ]]></programlisting>
  246. <para>
  247. Es ist auch möglich einen Übersetzer zu verwenden statt eigene Meldungen mit
  248. <code>setMessage()</code> zu setzen. Aber wenn man das tut, sollte man im Kopf behalten
  249. das der Übersetzer auch mit den Meldungen arbeitet die man selbst gesetzt hat.
  250. </para>
  251. </sect2>
  252. </sect1>
  253. <!--
  254. vim:se ts=4 sw=4 et:
  255. -->