1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
<?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>
|