| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.quickstart.create-form">
- <title>Erstellen eines Formulars</title>
- <para>
- Damit unser Guestbook nützlich ist, benötigen wir ein Formular für die Übermittlung neuer
- Einträge.
- </para>
- <para>
- Unsere erste Arbeit ist die Erstellung der aktuellen Formularklasse. Um eine leere
- Fomularklasse zu erstellen muss folgendes ausgeführt werden:
- </para>
- <programlisting language="shell"><![CDATA[
- % zf create form Guestbook
- Creating a form at application/forms/Guestbook.php
- Updating project profile '.zfproject.xml'
- ]]></programlisting>
- <para>
- Dies erstellt das Verzeichnis <filename>application/forms/</filename> mit der
- Klassendatei <filename>Guestbook.php</filename>. Diese Datei ist zu öffnen und so zu
- aktualisieren das Sie wie folgt aussieht:
- </para>
- <programlisting language="php"><![CDATA[
- // application/forms/Guestbook.php
- class Application_Form_Guestbook extends Zend_Form
- {
- public function init()
- {
- // Setzt die Methode for das Anzeigen des Formulars mit POST
- $this->setMethod('post');
- // Ein Email Element hinzufügen
- $this->addElement('text', 'email', array(
- 'label' => 'Deine Email Adresse:',
- 'required' => true,
- 'filters' => array('StringTrim'),
- 'validators' => array(
- 'EmailAddress',
- )
- ));
- // Das Kommentar Element hinzufügen
- $this->addElement('textarea', 'comment', array(
- 'label' => 'Bitte ein Kommentar:',
- 'required' => true,
- 'validators' => array(
- array('validator' => 'StringLength', 'options' => array(0, 20))
- )
- ));
- // Ein Captcha hinzufügen
- $this->addElement('captcha', 'captcha', array(
- 'label' => "Bitte die 5 Buchstaben eingeben die unterhalb "
- . "angezeigt werden:",
- 'required' => true,
- 'captcha' => array(
- 'captcha' => 'Figlet',
- 'wordLen' => 5,
- 'timeout' => 300
- )
- ));
- // Den Submit Button hinzufügen
- $this->addElement('submit', 'submit', array(
- 'ignore' => true,
- 'label' => 'Im Guestbook eintragen',
- ));
- // Und letztendlich etwas CSRF Protektion hinzufügen
- $this->addElement('hash', 'csrf', array(
- 'ignore' => true,
- ));
- }
- }
- ]]></programlisting>
- <para>
- Das obige Formular definiert fünf Elemente: ein Feld für die Email Adresse, eines für das
- Kommentar, ein <acronym>CAPTCHA</acronym> um Spam Einträge zu verhindern, einen Submit
- Button und ein <acronym>CSRF</acronym> Protektions Token.
- </para>
- <para>
- Als nächstes fügen wir eine <methodname>signAction()</methodname> zu unserem
- <classname>GuestbookController</classname> welche das Formular nach der Übertragung
- bearbeitet. Um die Action und das betreffende View Skript zu erstellen muss das folgende
- ausgeführt werden:
- </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>
- Das erstellt eine <methodname>signAction()</methodname> Methode in unserem Controller, sowie
- das betreffende View Skript.
- </para>
- <para>
- Fügen wir etwas Logik in unsere Sign Aktion des Guestbook Controller's ein. Wir müssen
- zuerst prüfen ob wir eine <acronym>POST</acronym> oder eine <acronym>GET</acronym> Anfrage
- erhalten; im letzteren Fall zeigen wir das Formular einfach an. Wenn wir aber eine
- <acronym>POST</acronym> 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:
- </para>
- <programlisting language="php"><![CDATA[
- // application/controllers/GuestbookController.php
- class GuestbookController extends Zend_Controller_Action
- {
- // wir übergehen indexAction()...
- 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>
- Natürlich müssen wir das View Skript bearbeiten; es muss
- <filename>application/views/scripts/guestbook/sign.phtml</filename> bearbeitet werden damit
- es wie folgt aussieht:
- </para>
- <programlisting language="php"><![CDATA[
- <!-- application/views/scripts/guestbook/sign.phtml -->
- Bitte verwende das folgende Formular um sich in unser Guestbook einzutragen!
- <?php
- $this->form->setAction($this->url());
- echo $this->form;
- ]]></programlisting>
- <note>
- <title>Besser aussehende Formulare</title>
- <para>
- 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
- <link linkend="zend.form.decorators">Kapitel über Decorations vom Referenz
- Handbuch</link> nach Details.
- </para>
- <para>
- Zusätzlich könnte man an <link
- linkend="learning.form.decorators.intro">unserem Tutorial über Formular
- Decorations</link> interessiert sein.
- </para>
- </note>
- <note>
- <title>Checkpoint</title>
- <para>
- Jetzt gehen wir auf "http://localhost/guestbook/sign". Man sollte das folgende im
- eigenen Browser sehen:
- </para>
- <para>
- <inlinegraphic width="421" scale="100" align="center" valign="middle"
- fileref="figures/learning.quickstart.create-form.png" format="PNG" />
- </para>
- </note>
- </sect1>
|