quickstart-create-form.xml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.quickstart.create-form">
  5. <title>Créer un formulaire</title>
  6. <para>
  7. Pour que notre livre d'or soit utile, nous allons avoir besoin d'un formulaire permettant de
  8. le remplir.
  9. </para>
  10. <para>
  11. Nous devons donc créer un formulaire. Pour créer un formulaire vierge, exécutez la
  12. commande&#160;:
  13. </para>
  14. <programlisting language="shell"><![CDATA[
  15. % zf create form Guestbook
  16. Creating a form at application/forms/Guestbook.php
  17. Updating project profile '.zfproject.xml'
  18. ]]></programlisting>
  19. <para>
  20. Ceci créera le dossier <filename>application/forms/</filename> avec un fichier de classe
  21. <filename>Guestbook.php</filename>. Ouvrez ce fichier et mettez le à jour comme suit&#160;:
  22. </para>
  23. <programlisting language="php"><![CDATA[
  24. // application/forms/Guestbook.php
  25. class Application_Form_Guestbook extends Zend_Form
  26. {
  27. public function init()
  28. {
  29. // La méthode HTTP d'envoi du formulaire
  30. $this->setMethod('post');
  31. // Un élément Email
  32. $this->addElement('text', 'email', array(
  33. 'label' => 'Your email address:',
  34. 'required' => true,
  35. 'filters' => array('StringTrim'),
  36. 'validators' => array(
  37. 'EmailAddress',
  38. )
  39. ));
  40. // Un élément pour le commentaire
  41. $this->addElement('textarea', 'comment', array(
  42. 'label' => 'Please Comment:',
  43. 'required' => true,
  44. 'validators' => array(
  45. array('validator' => 'StringLength', 'options' => array(0, 20))
  46. )
  47. ));
  48. // Un captcha
  49. $this->addElement('captcha', 'captcha', array(
  50. 'label' => 'Please enter the 5 letters displayed below:',
  51. 'required' => true,
  52. 'captcha' => array(
  53. 'captcha' => 'Figlet',
  54. 'wordLen' => 5,
  55. 'timeout' => 300
  56. )
  57. ));
  58. // Un bouton d'envoi
  59. $this->addElement('submit', 'submit', array(
  60. 'ignore' => true,
  61. 'label' => 'Sign Guestbook',
  62. ));
  63. // Et une protection anti CSRF
  64. $this->addElement('hash', 'csrf', array(
  65. 'ignore' => true,
  66. ));
  67. }
  68. }
  69. ]]></programlisting>
  70. <para>
  71. Le formulaire ci-dessus définit cinq éléments&#160;: une adresse email, un champ
  72. commentaire, un <acronym>CAPTCHA</acronym> anti spam, un bouton d'envoi et une protection
  73. anti <acronym>CSRF</acronym>.
  74. </para>
  75. <para>
  76. Maintenant nous allons ajouter une action <methodname>signAction()</methodname> à notre
  77. <classname>GuestbookController</classname> qui va s'occuper de la soumission du formulaire.
  78. Pour créer cette action et son script de vue, éxécutez&#160;:
  79. </para>
  80. <programlisting language="shell"><![CDATA[
  81. % zf create action sign Guestbook
  82. Creating an action named sign inside controller
  83. at application/controllers/GuestbookController.php
  84. Updating project profile '.zfproject.xml'
  85. Creating a view script for the sign action method
  86. at application/views/scripts/guestbook/sign.phtml
  87. Updating project profile '.zfproject.xml'
  88. ]]></programlisting>
  89. <para>
  90. Comme vous le voyez d'après l'affichage, ceci va créer une méthode
  91. <methodname>signAction()</methodname> dans notre contrôleur, ainsi que le script de vue
  92. approprié.
  93. </para>
  94. <para>
  95. Ajoutons de la logique dans notre action. Nous devons d'abord vérifier le type de requête
  96. HTTP <acronym>POST</acronym> ou <acronym>GET</acronym>&#160;; dans ce dernier cas nous
  97. affichons simplement le formulaire. Cependant, si nous recevons une requête
  98. <acronym>POST</acronym>, nous allons vouloir valider le formulaire par rapport aux données
  99. postées, et s'il est valide, créer une nouvelle entrée et la sauvegarder. La logique
  100. ressemble à ceci&#160;:
  101. </para>
  102. <programlisting language="php"><![CDATA[
  103. // application/controllers/GuestbookController.php
  104. class GuestbookController extends Zend_Controller_Action
  105. {
  106. // indexAction() ici ...
  107. public function signAction()
  108. {
  109. $request = $this->getRequest();
  110. $form = new Application_Form_Guestbook();
  111. if ($this->getRequest()->isPost()) {
  112. if ($form->isValid($request->getPost())) {
  113. $comment = new Application_Model_Guestbook($form->getValues());
  114. $mapper = new Application_Model_GuestbookMapper();
  115. $mapper->save($comment);
  116. return $this->_helper->redirector('index');
  117. }
  118. }
  119. $this->view->form = $form;
  120. }
  121. }
  122. ]]></programlisting>
  123. <para>
  124. Bien sur, nous devons aussi éditer le script de vue. Editez
  125. <filename>application/views/scripts/guestbook/sign.phtml</filename> avec ceci&#160;:
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. <!-- application/views/scripts/guestbook/sign.phtml -->
  129. Utilisez le formulaire ci-après pour signer notre livre d'or!
  130. <?php
  131. $this->form->setAction($this->url());
  132. echo $this->form;
  133. ]]></programlisting>
  134. <note>
  135. <title>Améliorer le rendu visuel du formulaire</title>
  136. <para>
  137. Ce formulaire n'a pas un look terrible, peu importe&#160;: l'apparence d'un formulaire
  138. est entièrement personnalisable&#160;! Voyez la <link
  139. linkend="zend.form.decorators">section sur les décorateurs dans le guide de
  140. réference</link> pour plus de détails.
  141. </para>
  142. <para>
  143. Aussi, vous pouvez être intéréssés par <link
  144. linkend="learning.form.decorators.intro">notre tutoriel sur les décorateurs de
  145. formulaires</link>.
  146. </para>
  147. </note>
  148. <note>
  149. <title>Checkpoint</title>
  150. <para>
  151. Naviguez maintenant sur "http://localhost/guestbook/sign". Vous devriez voir ceci dans
  152. votre navigateur&#160;:
  153. </para>
  154. <para>
  155. <inlinegraphic width="421" scale="100" align="center" valign="middle"
  156. fileref="figures/learning.quickstart.create-form.png" format="PNG" />
  157. </para>
  158. </note>
  159. </sect1>