[MANUAL] English:
[zend.git] / documentation / manual / pl / tutorials / quickstart-create-form.xml
blobc57e236d9a168f634c04e56a8b32ece32ea30b5b
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20879 -->
3 <!-- Reviewed: yes -->
4 <sect1 id="learning.quickstart.create-form">
5     <title>Tworzenie formularza</title>
7     <para>
8         Aby aplikacja księgi gości była użyteczna należy umieścić w niej formularz
9         umożliwiający dodawanie nowych wpisów.
10     </para>
12     <para>
13         W pierwszej kolejności należy utworzyć klasę formularza. Można to osiągnąć 
14         poprzez polecenie:
15     </para>
17     <programlisting language="shell"><![CDATA[
18 % zf create form Guestbook
19 Creating a form at application/forms/Guestbook.php
20 Updating project profile '.zfproject.xml'
21 ]]></programlisting>
23     <para>
24         Powyższe polecenie utworzy katalog <filename>application/forms/</filename>
25         zawierający plik <filename>Guestbook.php</filename>. Należy umieścić w 
26         nim następującą treść:
27     </para>
29     <programlisting language="php"><![CDATA[
30 // application/forms/Guestbook.php
32 class Application_Form_Guestbook extends Zend_Form
34     public function init()
35     {
36         // Ustawienie metody wysyłki danych formularza na POST
37         $this->setMethod('post');
39         // Dodanie elementu do wpisania adresu e-mail
40         $this->addElement('text', 'email', array(
41             'label'      => 'Your email address:',
42             'required'   => true,
43             'filters'    => array('StringTrim'),
44             'validators' => array(
45                 'EmailAddress',
46             )
47         ));
49         // Dodanie elementu do dodania komentarza
50         $this->addElement('textarea', 'comment', array(
51             'label'      => 'Please Comment:',
52             'required'   => true,
53             'validators' => array(
54                 array('validator' => 'StringLength', 'options' => array(0, 20))
55                 )
56         ));
58         // Dodanie elementu captcha
59         $this->addElement('captcha', 'captcha', array(
60             'label'      => 'Please enter the 5 letters displayed below:',
61             'required'   => true,
62             'captcha'    => array(
63                 'captcha' => 'Figlet',
64                 'wordLen' => 5,
65                 'timeout' => 300
66             )
67         ));
69         // Dodanie guzika do wysyłki
70         $this->addElement('submit', 'submit', array(
71             'ignore'   => true,
72             'label'    => 'Sign Guestbook',
73         ));
75         // Dodanie zabezpieczenia przed CSRF
76         $this->addElement('hash', 'csrf', array(
77             'ignore' => true,
78         ));
79     }
81 ]]></programlisting>
83     <para>
84         Powyższy formularz definiuje pięć elementów: pole adresu e-mail, pole 
85         komentarza, pole <acronym>CAPTCHA</acronym> dla zabezpieczenia przed spamem, 
86         przycisk wysłania komentarza oraz żeton bezpieczeństwa (przed <acronym>CSRF</acronym>).
87     </para>
89     <para>
90         Następnie należy zdefiniować nową akcję <methodname>signAction()</methodname> 
91         w kontrolerze <classname>GuestbookController</classname>, która będzie 
92         odpowiedzialna za odbiór danych wysłanych przez formularz. Aby utworzyć 
93         nową akcję oraz związany z nią skrypt widoku należy uruchomić następujące 
94         polecenie:
95     </para>
97     <programlisting language="shell"><![CDATA[
98 % zf create action sign Guestbook
99 Creating an action named sign inside controller
100     at application/controllers/GuestbookController.php
101 Updating project profile '.zfproject.xml'
102 Creating a view script for the sign action method
103     at application/views/scripts/guestbook/sign.phtml
104 Updating project profile '.zfproject.xml'
105 ]]></programlisting>
107     <para>
108         Jak widać z komunikatów, polecenie tworzy metodę <methodname>signAction()</methodname>
109         w kontrolerze oraz odpowiedni widok.
110     </para>
112     <para>
113         Teraz należy zapisać logikę aplikacji w treści nowej akcji. Na początek należy sprawdzić
114         czy żądanie zostało otrzymane metodą <acronym>POST</acronym> czy <acronym>GET</acronym>.
115         W drugim przypadku zostanie po prostu pokazany formularz do
116         wypełnienia. Jednak dla metody <acronym>POST</acronym> niezbędne będzie sprawdzenie
117         poprawności przesyłanych danych oraz w przypadku pozytywnej weryfikacji, utworzenie
118         nowego rekordu i zapisanie go w bazie danych. Logika może wyglądać następująco:
119     </para>
121     <programlisting language="php"><![CDATA[
122 // application/controllers/GuestbookController.php
124 class GuestbookController extends Zend_Controller_Action
126     // w tym miejscu jest indexAction()...
128     public function signAction()
129     {
130         $request = $this->getRequest();
131         $form    = new Application_Form_Guestbook();
133         if ($this->getRequest()->isPost()) {
134             if ($form->isValid($request->getPost())) {
135                 $comment = new Application_Model_Guestbook($form->getValues());
136                 $mapper  = new Application_Model_GuestbookMapper();
137                 $mapper->save($comment);
138                 return $this->_helper->redirector('index');
139             }
140         }
142         $this->view->form = $form;
143     }
145 ]]></programlisting>
147     <para>
148         Niezbędna jest również zmiana skryptu widoku
149         <filename>application/views/scripts/guestbook/sign.phtml</filename>
150         tak aby zawierał następującą treść:
151     </para>
153     <programlisting language="php"><![CDATA[
154 <!-- application/views/scripts/guestbook/sign.phtml -->
156 Please use the form below to sign our guestbook!
158 <?php
159 $this->form->setAction($this->url());
160 echo $this->form;
161 ]]></programlisting>
163     <note>
164         <title>Lepszy wygląd formularzy</title>
166         <para>
167             Tak powstały formularz nie stanowi wzoru piękna, ale należy pamiętać, iż wygląd
168             jest w pełni edytowalny. Więcej informacji można zasięgnąć w
169             <link linkend="zend.form.decorators">rozdziale dotyczącym dekoratorów formularzy</link>.
170         </para>
172         <para>
173             Dodatkowo przydatny może się okazać
174             <link linkend="learning.form.decorators.intro">samouczek tworzenia 
175             dekoratorów formularzy</link>.
176         </para>
177     </note>
179     <note>
180         <title>Punkt kontrolny</title>
182         <para>
183             Po wejściu pod adres "http://localhost/guestbook/sign" powinien się 
184             pokazać formularz księgi gości:
185         </para>
187         <para>
188             <inlinegraphic width="421" scale="100" align="center" valign="middle"
189                 fileref="figures/learning.quickstart.create-form.png" format="PNG" />
190         </para>
191     </note>
192 </sect1>