Zend_Validate-Db.xml 8.0 KB

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