Ein Modell und eine Datenbanktabelle erstellen

Erstellen eines Formulars

Damit unser Guestbook nützlich ist, benötigen wir ein Formular für die Übermittlung neuer Einträge.

Unsere erste Arbeit ist die Erstellung der aktuellen Formularklasse. Um eine leere Fomularklasse zu erstellen muss folgendes ausgeführt werden:

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

Dies erstellt das Verzeichnis application/forms/ mit der Klassendatei Guestbook.php. Diese Datei ist zu öffnen und so zu aktualisieren das Sie wie folgt aussieht:

  1. // application/forms/Guestbook.php
  2.  
  3. class Application_Form_Guestbook extends Zend_Form
  4. {
  5.     public function init()
  6.     {
  7.         // Setzt die Methode for das Anzeigen des Formulars mit POST
  8.         $this->setMethod('post');
  9.  
  10.         // Ein Email Element hinzufügen
  11.         $this->addElement('text', 'email', array(
  12.             'label'      => 'Deine Email Adresse:',
  13.             'required'   => true,
  14.             'filters'    => array('StringTrim'),
  15.             'validators' => array(
  16.                 'EmailAddress',
  17.             )
  18.         ));
  19.  
  20.         // Das Kommentar Element hinzufügen
  21.         $this->addElement('textarea', 'comment', array(
  22.             'label'      => 'Bitte ein Kommentar:',
  23.             'required'   => true,
  24.             'validators' => array(
  25.                 array('validator' => 'StringLength', 'options' => array(0, 20))
  26.                 )
  27.         ));
  28.  
  29.         // Ein Captcha hinzufügen
  30.         $this->addElement('captcha', 'captcha', array(
  31.             'label'      => "Bitte die 5 Buchstaben eingeben die unterhalb "
  32.                           . "angezeigt werden:",
  33.             'required'   => true,
  34.             'captcha'    => array(
  35.                 'captcha' => 'Figlet',
  36.                 'wordLen' => 5,
  37.                 'timeout' => 300
  38.             )
  39.         ));
  40.  
  41.         // Den Submit Button hinzufügen
  42.         $this->addElement('submit', 'submit', array(
  43.             'ignore'   => true,
  44.             'label'    => 'Im Guestbook eintragen',
  45.         ));
  46.  
  47.         // Und letztendlich etwas CSRF Protektion hinzufügen
  48.         $this->addElement('hash', 'csrf', array(
  49.             'ignore' => true,
  50.         ));
  51.     }
  52. }

Das obige Formular definiert fünf Elemente: ein Feld für die Email Adresse, eines für das Kommentar, ein CAPTCHA um Spam Einträge zu verhindern, einen Submit Button und ein CSRF Protektions Token.

Als nächstes fügen wir eine signAction() zu unserem GuestbookController welche das Formular nach der Übertragung bearbeitet. Um die Action und das betreffende View Skript zu erstellen muss das folgende ausgeführt werden:

  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'

Das erstellt eine signAction() Methode in unserem Controller, sowie das betreffende View Skript.

Fügen wir etwas Logik in unsere Sign Aktion des Guestbook Controller's ein. Wir müssen zuerst prüfen ob wir eine POST oder eine GET Anfrage erhalten; im letzteren Fall zeigen wir das Formular einfach an. Wenn wir aber eine POST Anfrage erhalten, wollten wir die übermittelten Daten gegenüber unserem Formular prüfen, und wenn es gültig ist, wird ein neuer Eintrag erstellt und gespeichert. Die Logik könnte wie folgt aussehen:

  1. // application/controllers/GuestbookController.php
  2.  
  3. class GuestbookController extends Zend_Controller_Action
  4. {
  5.     // wir übergehen indexAction()...
  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. }

Natürlich müssen wir das View Skript bearbeiten; es muss application/views/scripts/guestbook/sign.phtml bearbeitet werden damit es wie folgt aussieht:

  1. <!-- application/views/scripts/guestbook/sign.phtml -->
  2.  
  3. Bitte verwende das folgende Formular um sich in unser Guestbook einzutragen!
  4.  
  5. <?php
  6. $this->form->setAction($this->url());
  7. echo $this->form;

Note: Besser aussehende Formulare
Keiner wird sich irgendwann poetisch über die Schönheit dieses Formulars auslassen. Kein Problem - das Aussehen des Formulars kann komplett angepasst werden! Siehe auch im Kapitel über Decorations vom Referenz Handbuch nach Details.
Zusätzlich könnte man an unserem Tutorial über Formular Decorations interessiert sein.

Note: Checkpoint
Jetzt gehen wir auf "http://localhost/guestbook/sign". Man sollte das folgende im eigenen Browser sehen:

learning.quickstart.create-form.png


Ein Modell und eine Datenbanktabelle erstellen