Zend_Validate-Db.xml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.Db">
  5. <title>Db_RecordExists und Db_NoRecordExists</title>
  6. <para>
  7. <classname>Zend_Validate_Db_RecordExists</classname> und <classname>Zend_Validate_Db_NoRecordExists</classname>
  8. bieten die Möglichkeit zu testen ob ein Eintrag in einer angegebenen Tabelle einer
  9. Datenbank, mit einem gegebenen Wert, existiert.
  10. </para>
  11. <sect3 id="zend.validate.db.basic-usage">
  12. <title>Grundsätzliche Verwendung</title>
  13. <para>
  14. Ein Beispiel der rundsätzlichen Verwendung der Validatoren:
  15. </para>
  16. <programlisting role="php"><![CDATA[
  17. // Prüft ob die Email Adresse in der Datenbank existiert
  18. $validator = new Zend_Validate_Db_RecordExists('users', 'emailaddress');
  19. if ($validator->isValid($emailaddress)) {
  20. // Die Email Adresse scheint gültig zu sein
  21. } else {
  22. // Die Email Adresse ist ungültig; gib die Gründe an
  23. foreach ($validator->getMessages() as $message) {
  24. echo "$message\n";
  25. }
  26. }
  27. ]]></programlisting>
  28. <para>
  29. Das oben stehende testet ob eine gegebene Email Adresse in der Datenbanktabelle
  30. vorhanden ist. Wenn kein Eintrag gefunden wird der den Wert von
  31. <code>$emailaddress</code> in der spezifizierten Spalte hat, wird eine
  32. Fehlermeldung angezeigt.
  33. </para>
  34. <programlisting role="php"><![CDATA[
  35. // Prüft ob der Benutzername in der Datenbank existiert
  36. $validator = new Zend_Validate_Db_NoRecordExists('users', 'username');
  37. if ($validator->isValid($username)) {
  38. // Der Benutzername scheint gültig zu sein
  39. } else {
  40. // Der Benutzername ist ungültig; gib die Gründe an
  41. $messages = $validator->getMessages();
  42. foreach ($messages as $message) {
  43. echo "$message\n";
  44. }
  45. }
  46. ]]></programlisting>
  47. <para>
  48. Das oben stehende testet ob ein angegebener Benutzername nicht in der Datenbanktabelle
  49. vorhanden ist. Wenn ein Eintrag gefunden wird, der den der von <code>$username</code>
  50. in der spezifizierten Spalte enthält, dann wird eine Fehlermeldung angezeigt.
  51. </para>
  52. </sect3>
  53. <sect3 id="zend.validate.db.excluding-records">
  54. <title>Ausnehmen von Einträgen</title>
  55. <para>
  56. <classname>Zend_Validate_Db_RecordExists</classname> und
  57. <classname>Zend_Validate_Db_NoRecordExists</classname> bieten auch die Möglichkeit die Datenbank
  58. zu testen, wobei Teile der Tabelle hiervon ausgenommen werden, entweder indem eine
  59. where Klausel als String angegeben wird, oder ein Array mit den Schlüsseln "field" und
  60. "value".
  61. </para>
  62. <para>
  63. Wenn ein Array für die Ausnahmeklausel angegeben wird, dann wird der <code>!=</code>
  64. Operator verwenden. Damit kann der Rest einer Tabelle auf einen Wert geprüft werden
  65. bevor ein Eintrag geändert wird (zum Beispiel in einem Formular für ein
  66. Benutzerprofil).
  67. </para>
  68. <programlisting role="php"><![CDATA[
  69. // Prüft ob kein anderer Benutzer diesen Benutzernamen hat
  70. $user_id = $user->getId();
  71. $validator = new Zend_Validate_Db_NoRecordExists(
  72. 'users',
  73. 'username',
  74. array(
  75. 'field' => 'id',
  76. 'value' => $user_id
  77. )
  78. );
  79. if ($validator->isValid($username)) {
  80. // Der Benutzername scheint gültig zu sein
  81. } else {
  82. // Der Benutzername ist ungültig; zeige den Grund
  83. $messages = $validator->getMessages();
  84. foreach ($messages as $message) {
  85. echo "$message\n";
  86. }
  87. }
  88. ]]></programlisting>
  89. <para>
  90. Das obige Beispiel prüft die Tabelle um sicherzustellen das keine anderen Einträge
  91. existieren bei denen <code>id = $user_id</code> als Wert $username enthalten.
  92. </para>
  93. <para>
  94. Man kann auch einen String an die Ausnahmeklausel angeben damit man einen anderen
  95. Operator als <code>!=</code> verwenden kann. Das kann nützlich sein um bei geteilten
  96. Schlüsseln zu testen.
  97. </para>
  98. <programlisting role="php"><![CDATA[
  99. $post_id = $post->getId();
  100. $clause = $db->quoteInto('post_id = ?', $category_id);
  101. $validator = new Zend_Validate_Db_RecordExists(
  102. 'posts_categories',
  103. 'post_id',
  104. $clause
  105. );
  106. if ($validator->isValid($username)) {
  107. // Der Benutzername scheint gültig zu sein
  108. } else {
  109. // Der Benutzername ist ungültig; die Gründe ausgeben
  110. $messages = $validator->getMessages();
  111. foreach ($messages as $message) {
  112. echo "$message\n";
  113. }
  114. }
  115. ]]></programlisting>
  116. <para>
  117. Das obige Beispiel prüft die Tabelle <code>posts_categories</code> und stellt sicher
  118. das ein Eintrag der <code>post_id</code> einen Wert hat der <code>$category_id</code>
  119. entspricht.
  120. </para>
  121. </sect3>
  122. <sect3 id="zend.validate.db.database-adapters">
  123. <title>Datenbank Adapter</title>
  124. <para>
  125. Man kann auch einen Adapter, als vierten Parameter, spezifizieren wenn man die Prüfung
  126. instanziiert. Das erlaubt es mit Anwendungen zu arbeiten die mehrere Datenbankadapter
  127. verwenden, oder wo kein Standardadapter gesetzt wird. Als Beispiel:
  128. </para>
  129. <programlisting role="php"><![CDATA[
  130. $validator = new Zend_Validate_Db_RecordExists('users', 'id', null, $dbAdapter);
  131. ]]></programlisting>
  132. </sect3>
  133. </sect2>