Créer un modèle et une table en base de données

Créer un formulaire

Pour que notre livre d'or soit utile, nous allons avoir besoin d'un formulaire permettant de le remplir.

Nous devons donc créer un formulaire. Pour créer un formulaire vierge, exécutez la commande :

  1. % zf create form Guestbook
  2. Creating a form at application/forms/Guestbook.php
  3. Updating project profile '.zfproject.xml'

Ceci créera le dossier application/forms/ avec un fichier de classe Guestbook.php. Ouvrez ce fichier et mettez le à jour comme suit :

  1. // application/forms/Guestbook.php
  2.  
  3. class Application_Form_Guestbook extends Zend_Form
  4. {
  5.     public function init()
  6.     {
  7.         // La méthode HTTP d'envoi du formulaire
  8.         $this->setMethod('post');
  9.  
  10.         // Un élément Email
  11.         $this->addElement('text', 'email', array(
  12.             'label'      => 'Your email address:',
  13.             'required'   => true,
  14.             'filters'    => array('StringTrim'),
  15.             'validators' => array(
  16.                 'EmailAddress',
  17.             )
  18.         ));
  19.  
  20.         // Un élément pour le commentaire
  21.         $this->addElement('textarea', 'comment', array(
  22.             'label'      => 'Please Comment:',
  23.             'required'   => true,
  24.             'validators' => array(
  25.                 array('validator' => 'StringLength', 'options' => array(0, 20))
  26.                 )
  27.         ));
  28.  
  29.         // Un captcha
  30.         $this->addElement('captcha', 'captcha', array(
  31.             'label'      => 'Please enter the 5 letters displayed below:',
  32.             'required'   => true,
  33.             'captcha'    => array(
  34.                 'captcha' => 'Figlet',
  35.                 'wordLen' => 5,
  36.                 'timeout' => 300
  37.             )
  38.         ));
  39.  
  40.         // Un bouton d'envoi
  41.         $this->addElement('submit', 'submit', array(
  42.             'ignore'   => true,
  43.             'label'    => 'Sign Guestbook',
  44.         ));
  45.  
  46.         // Et une protection anti CSRF
  47.         $this->addElement('hash', 'csrf', array(
  48.             'ignore' => true,
  49.         ));
  50.     }
  51. }

Le formulaire ci-dessus définit cinq éléments : une adresse email, un champ commentaire, un CAPTCHA anti spam, un bouton d'envoi et une protection anti CSRF.

Maintenant nous allons ajouter une action signAction() à notre GuestbookController qui va s'occuper de la soumission du formulaire. Pour créer cette action et son script de vue, éxécutez :

  1. % zf create action sign Guestbook
  2. Creating an action named sign inside controller
  3.     at application/controllers/GuestbookController.php
  4. Updating project profile '.zfproject.xml'
  5. Creating a view script for the sign action method
  6.     at application/views/scripts/guestbook/sign.phtml
  7. Updating project profile '.zfproject.xml'

Comme vous le voyez d'après l'affichage, ceci va créer une méthode signAction() dans notre contrôleur, ainsi que le script de vue approprié.

Ajoutons de la logique dans notre action. Nous devons d'abord vérifier le type de requête HTTP POST ou GET ; dans ce dernier cas nous affichons simplement le formulaire. Cependant, si nous recevons une requête POST, 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 :

  1. // application/controllers/GuestbookController.php
  2.  
  3. class GuestbookController extends Zend_Controller_Action
  4. {
  5.     // indexAction() ici ...
  6.  
  7.     public function signAction()
  8.     {
  9.         $request = $this->getRequest();
  10.         $form    = new Application_Form_Guestbook();
  11.  
  12.         if ($this->getRequest()->isPost()) {
  13.             if ($form->isValid($request->getPost())) {
  14.                 $comment = new Application_Model_Guestbook($form->getValues());
  15.                 $mapper  = new Application_Model_GuestbookMapper();
  16.                 $mapper->save($comment);
  17.                 return $this->_helper->redirector('index');
  18.             }
  19.         }
  20.  
  21.         $this->view->form = $form;
  22.     }
  23. }

Bien sur, nous devons aussi éditer le script de vue. Editez application/views/scripts/guestbook/sign.phtml avec ceci :

  1. <!-- application/views/scripts/guestbook/sign.phtml -->
  2.  
  3. Utilisez le formulaire ci-après pour signer notre livre d'or!
  4.  
  5. <?php
  6. $this->form->setAction($this->url());
  7. echo $this->form;

Note: Améliorer le rendu visuel du formulaire
Ce formulaire n'a pas un look terrible, peu importe : l'apparence d'un formulaire est entièrement personnalisable ! Voyez la section sur les décorateurs dans le guide de réference pour plus de détails.
Aussi, vous pouvez être intéréssés par notre tutoriel sur les décorateurs de formulaires.

Note: Checkpoint
Naviguez maintenant sur "http://localhost/guestbook/sign". Vous devriez voir ceci dans votre navigateur :

learning.quickstart.create-form.png


Créer un modèle et une table en base de données