Zend_Validate-Db.xml 5.4 KB

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