Zend_Validate-Db.xml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.Db">
  5. <title>Db_RecordExists et Db_NoRecordExists</title>
  6. <para>
  7. <classname>Zend_Validate_Db_RecordExists</classname> et
  8. <classname>Zend_Validate_Db_NoRecordExists</classname> permettent de vérifier si un enregistrement
  9. existe (ou pas) dans une table de base de données.
  10. </para>
  11. <sect3 id="zend.validate.set.db.options">
  12. <title>Options supportées par Zend_Validate_Db_*</title>
  13. <para>
  14. Les options suivantes sont supportées par
  15. <classname>Zend_Validate_Db_NoRecordExists</classname> et
  16. <classname>Zend_Validate_Db_RecordExists</classname>&#160;:
  17. </para>
  18. <itemizedlist>
  19. <listitem>
  20. <para>
  21. <emphasis><property>adapter</property></emphasis>&#160;: l'adaptateur de base
  22. de données qui sera utilisé pour la recherche.
  23. </para>
  24. </listitem>
  25. <listitem>
  26. <para>
  27. <emphasis><property>exclude</property></emphasis>&#160;: jeu d'enregistrements
  28. qui seront exclus de la recherche.
  29. </para>
  30. </listitem>
  31. <listitem>
  32. <para>
  33. <emphasis><property>field</property></emphasis>&#160;: le champs dans la table
  34. de la base de données dans lequel sera effectué la recherche.
  35. </para>
  36. </listitem>
  37. <listitem>
  38. <para>
  39. <emphasis><property>schema</property></emphasis>&#160;: le schéma utilisé
  40. pour la recherche.
  41. </para>
  42. </listitem>
  43. <listitem>
  44. <para>
  45. <emphasis><property>table</property></emphasis>&#160;: la table qui sera
  46. utilisée pour la recherche.
  47. </para>
  48. </listitem>
  49. </itemizedlist>
  50. </sect3>
  51. <sect3 id="zend.validate.db.basic-usage">
  52. <title>Utilisation de base</title>
  53. <para>
  54. Voici un exemple basique:
  55. </para>
  56. <programlisting language="php"><![CDATA[
  57. //Vérifie que l'email existe bien dans la base de données
  58. $validator = new Zend_Validate_Db_RecordExists(
  59. array(
  60. 'table' => 'users',
  61. 'field' => 'emailaddress'
  62. )
  63. );
  64. if ($validator->isValid($emailaddress)) {
  65. // l'adresse email existe
  66. } else {
  67. // l'adresse email n'existe pas, affichons les messages d'erreur
  68. foreach ($validator->getMessages() as $message) {
  69. echo "$message\n";
  70. }
  71. }
  72. ]]></programlisting>
  73. <para>
  74. Le code ci-dessus vérifie la présence d'une adresse email <varname>$emailaddress</varname>
  75. vis à vis d'un champ d'une table de base de données.
  76. </para>
  77. <programlisting language="php"><![CDATA[
  78. //Vérifie que le nom d'utilisateur n'est pas présent dans la table
  79. $validator = new Zend_Validate_Db_NoRecordExists(
  80. array(
  81. 'table' => 'users',
  82. 'field' => 'username'
  83. )
  84. );
  85. if ($validator->isValid($username)) {
  86. // Le nom d'utilisateur semble absent de la table
  87. } else {
  88. // invalide : l'utilisateur est probablement présent dans la table
  89. $messages = $validator->getMessages();
  90. foreach ($messages as $message) {
  91. echo "$message\n";
  92. }
  93. }
  94. ]]></programlisting>
  95. <para>
  96. Le code ci-dessus vérifie l'absence d'un nom d'utilisateur <varname>$username</varname>
  97. vis à vis d'un champ d'une table de base de données.
  98. </para>
  99. </sect3>
  100. <sect3 id="zend.validate.db.excluding-records">
  101. <title>Exclure des enregistrement</title>
  102. <para>
  103. <classname>Zend_Validate_Db_RecordExists</classname> et
  104. <classname>Zend_Validate_Db_NoRecordExists</classname> proposent aussi un moyen de tester
  105. la base de données en excluant certaines parties de table, en passant une clause where
  106. ou un tableau de paires "champs" "valeur".
  107. </para>
  108. <para>
  109. Lorsqu'un tableau est passé, l'opérateur <emphasis>!=</emphasis> est utilisé et vous
  110. pouvez ainsi tester le reste de la table.
  111. </para>
  112. <programlisting language="php"><![CDATA[
  113. // Vérifie qu'aucun autre utilisateur que celui dont l'id est spécifié,
  114. // ne possède ce nom
  115. $user_id = $user->getId();
  116. $validator = new Zend_Validate_Db_NoRecordExists(
  117. array(
  118. 'table' => 'users',
  119. 'field' => 'username',
  120. 'exclude' => array(
  121. 'field' => 'id',
  122. 'value' => $user_id
  123. )
  124. )
  125. );
  126. if ($validator->isValid($username)) {
  127. // OK
  128. } else {
  129. // KO
  130. $messages = $validator->getMessages();
  131. foreach ($messages as $message) {
  132. echo "$message\n";
  133. }
  134. }
  135. ]]></programlisting>
  136. <para>
  137. L'exemple ci dessus va vérifier dans la table qu'aucun autre enregistrement que celui
  138. pour lequel <command>id = $user_id</command> ne contient la valeur
  139. <varname>$username</varname>.
  140. </para>
  141. <para>
  142. La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser
  143. un opérateur autre que <emphasis>!=</emphasis>.
  144. </para>
  145. <programlisting language="php"><![CDATA[
  146. $email = 'user@example.com';
  147. $clause = $db->quoteInto('email = ?', $email);
  148. $validator = new Zend_Validate_Db_RecordExists(
  149. array(
  150. 'table' => 'users',
  151. 'field' => 'username',
  152. 'exclude' => $clause
  153. )
  154. );
  155. if ($validator->isValid($username)) {
  156. // OK
  157. } else {
  158. // KO
  159. $messages = $validator->getMessages();
  160. foreach ($messages as $message) {
  161. echo "$message\n";
  162. }
  163. }
  164. ]]></programlisting>
  165. <para>
  166. L'exemple ci-dessus vérifie la table 'users' pour s'assurer
  167. qu'un seul enregistrement avec un nom <varname>$username</varname> et un
  168. email <varname>$email</varname> est valide.
  169. </para>
  170. </sect3>
  171. <sect3 id="zend.validate.db.database-adapters">
  172. <title>Adaptateurs de base de données</title>
  173. <para>
  174. Un adaptateur spécifique peut être passé au validateur. Dans le cas contraire,
  175. il utilisera l'adaptateur déclaré comme étant celui par défaut:
  176. </para>
  177. <programlisting language="php"><![CDATA[
  178. $validator = new Zend_Validate_Db_RecordExists(
  179. array(
  180. 'table' => 'users',
  181. 'field' => 'id',
  182. 'adapter' => $dbAdapter
  183. )
  184. );
  185. ]]></programlisting>
  186. </sect3>
  187. <sect3 id="zend.validate.db.database-schemas">
  188. <title>Nom des bases de données</title>
  189. <para>
  190. Vous pouvez spécifier un nom de base de données (schéma) pour l'adaptateur
  191. PostgreSQL et DB/2 simplement grâce à un tableau possédant les clés
  192. <property>table</property> et <property>schema</property>. Voici un exemple&#160;:
  193. </para>
  194. <programlisting language="php"><![CDATA[
  195. $validator = new Zend_Validate_Db_RecordExists(
  196. array(
  197. 'table' => 'users',
  198. 'schema' => 'my',
  199. 'field' => 'id'
  200. )
  201. );
  202. ]]></programlisting>
  203. </sect3>
  204. </sect2>