Zend_Validate-Db.xml 6.4 KB

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