Zend_Validate-Db.xml 6.1 KB

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