| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.quickstart.create-form">
- <title>Créer un formulaire</title>
- <para>
- Pour que notre livre d'or soit utile, nous allons avoir besoin d'un formulaire permettant de
- le remplir.
- </para>
- <para>
- Nous devons donc créer un formulaire. Pour créer un formulaire vierge, exécutez la
- commande :
- </para>
- <programlisting language="shell"><![CDATA[
- % zf create form Guestbook
- Creating a form at application/forms/Guestbook.php
- Updating project profile '.zfproject.xml'
- ]]></programlisting>
- <para>
- Ceci créera le dossier <filename>application/forms/</filename> avec un fichier de classe
- <filename>Guestbook.php</filename>. Ouvrez ce fichier et mettez le à jour comme suit :
- </para>
- <programlisting language="php"><![CDATA[
- // application/forms/Guestbook.php
- class Application_Form_Guestbook extends Zend_Form
- {
- public function init()
- {
- // La méthode HTTP d'envoi du formulaire
- $this->setMethod('post');
- // Un élément Email
- $this->addElement('text', 'email', array(
- 'label' => 'Your email address:',
- 'required' => true,
- 'filters' => array('StringTrim'),
- 'validators' => array(
- 'EmailAddress',
- )
- ));
- // Un élément pour le commentaire
- $this->addElement('textarea', 'comment', array(
- 'label' => 'Please Comment:',
- 'required' => true,
- 'validators' => array(
- array('validator' => 'StringLength', 'options' => array(0, 20))
- )
- ));
- // Un captcha
- $this->addElement('captcha', 'captcha', array(
- 'label' => 'Please enter the 5 letters displayed below:',
- 'required' => true,
- 'captcha' => array(
- 'captcha' => 'Figlet',
- 'wordLen' => 5,
- 'timeout' => 300
- )
- ));
- // Un bouton d'envoi
- $this->addElement('submit', 'submit', array(
- 'ignore' => true,
- 'label' => 'Sign Guestbook',
- ));
- // Et une protection anti CSRF
- $this->addElement('hash', 'csrf', array(
- 'ignore' => true,
- ));
- }
- }
- ]]></programlisting>
- <para>
- Le formulaire ci-dessus définit cinq éléments : une adresse email, un champ
- commentaire, un <acronym>CAPTCHA</acronym> anti spam, un bouton d'envoi et une protection
- anti <acronym>CSRF</acronym>.
- </para>
- <para>
- Maintenant nous allons ajouter une action <methodname>signAction()</methodname> à notre
- <classname>GuestbookController</classname> qui va s'occuper de la soumission du formulaire.
- Pour créer cette action et son script de vue, éxécutez :
- </para>
- <programlisting language="shell"><![CDATA[
- % zf create action sign Guestbook
- Creating an action named sign inside controller
- at application/controllers/GuestbookController.php
- Updating project profile '.zfproject.xml'
- Creating a view script for the sign action method
- at application/views/scripts/guestbook/sign.phtml
- Updating project profile '.zfproject.xml'
- ]]></programlisting>
- <para>
- Comme vous le voyez d'après l'affichage, ceci va créer une méthode
- <methodname>signAction()</methodname> dans notre contrôleur, ainsi que le script de vue
- approprié.
- </para>
- <para>
- Ajoutons de la logique dans notre action. Nous devons d'abord vérifier le type de requête
- HTTP <acronym>POST</acronym> ou <acronym>GET</acronym> ; dans ce dernier cas nous
- affichons simplement le formulaire. Cependant, si nous recevons une requête
- <acronym>POST</acronym>, nous allons vouloir valider le formulaire par rapport aux données
- postées, et s'il est valide, créer une nouvelle entrée et la sauvegarder. La logique
- ressemble à ceci :
- </para>
- <programlisting language="php"><![CDATA[
- // application/controllers/GuestbookController.php
- class GuestbookController extends Zend_Controller_Action
- {
- // indexAction() ici ...
- public function signAction()
- {
- $request = $this->getRequest();
- $form = new Application_Form_Guestbook();
- if ($this->getRequest()->isPost()) {
- if ($form->isValid($request->getPost())) {
- $comment = new Application_Model_Guestbook($form->getValues());
- $mapper = new Application_Model_GuestbookMapper();
- $mapper->save($comment);
- return $this->_helper->redirector('index');
- }
- }
- $this->view->form = $form;
- }
- }
- ]]></programlisting>
- <para>
- Bien sur, nous devons aussi éditer le script de vue. Editez
- <filename>application/views/scripts/guestbook/sign.phtml</filename> avec ceci :
- </para>
- <programlisting language="php"><![CDATA[
- <!-- application/views/scripts/guestbook/sign.phtml -->
- Utilisez le formulaire ci-après pour signer notre livre d'or!
- <?php
- $this->form->setAction($this->url());
- echo $this->form;
- ]]></programlisting>
- <note>
- <title>Améliorer le rendu visuel du formulaire</title>
- <para>
- Ce formulaire n'a pas un look terrible, peu importe : l'apparence d'un formulaire
- est entièrement personnalisable ! Voyez la <link
- linkend="zend.form.decorators">section sur les décorateurs dans le guide de
- réference</link> pour plus de détails.
- </para>
- <para>
- Aussi, vous pouvez être intéréssés par <link
- linkend="learning.form.decorators.intro">notre tutoriel sur les décorateurs de
- formulaires</link>.
- </para>
- </note>
- <note>
- <title>Checkpoint</title>
- <para>
- Naviguez maintenant sur "http://localhost/guestbook/sign". Vous devriez voir ceci dans
- votre navigateur :
- </para>
- <para>
- <inlinegraphic width="421" scale="100" align="center" valign="middle"
- fileref="figures/learning.quickstart.create-form.png" format="PNG" />
- </para>
- </note>
- </sect1>
|