1.5 Zend Framework — Быстрый старт. Создание формы |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Для нашей гостевой книги еще необходима форма для отправки новых записей.
Наша первоочередная задача это создать класс формы. Что бы создать пустой класс формы выполните:
01. % zf create form Guestbook
02. Creating a form at application/forms/Guestbook.php
03. Updating project profile '.zfproject.xml'
Это создаст каталог application/forms/ с файлом класса Guestbook.php. Откройте этот файл и обновите его следующим образом:
01. // application/forms/Guestbook.php
02.
03. class Application_Form_Guestbook extends Zend_Form
04. {
05. public function init()
06. {
07. // Установка метода отображения формы в POST
08. $this->setMethod('post');
09.
10. // Добавление элемента email
11. $this->addElement('text', 'email', array(
12. 'label' => 'Ваш адрес e-mail:',
13. 'required' => true,
14. 'filters' => array('StringTrim'),
15. 'validators' => array(
16. 'EmailAddress',
17. )
18. ));
19.
20. // Добавление элемента комментарий
21. $this->addElement('textarea', 'comment', array(
22. 'label' => 'Ваш комментарий:',
23. 'required' => true,
24. 'validators' => array(
25. array('validator' => 'StringLength', 'options' => array(0, 20))
26. )
27. ));
28.
29. // Добавление каптчи
30. $this->addElement('captcha', 'captcha', array(
31. 'label' => 'Пожалуйста, введите 5 букв отображенных ниже:',
32. 'required' => true,
33. 'captcha' => array(
34. 'captcha' => 'Figlet',
35. 'wordLen' => 5,
36. 'timeout' => 300
37. )
38. ));
39.
40. // Добавление кнопки отправить
41. $this->addElement('submit', 'submit', array(
42. 'ignore' => true,
43. 'label' => 'Sign Guestbook',
44. ));
45.
46. // И в конце добавим защиту от подделки межсайтовых запросов (CSRF)
47. $this->addElement('hash', 'csrf', array(
48. 'ignore' => true,
49. ));
50. }
51. }
Выше определена форма из пяти элементов: поле email адреса, комментария, каптча для защиты от отправки спама, кнопка отправки, и защитный маркер CSRF.
Далее, мы добавим signAction() в наш GuestbookController который подготовит форму для показа. Для создания действия и соответствующего скрипта вида, выполните следующую команду:
01. % zf create action sign Guestbook
02. Creating an action named sign inside controller
03. at application/controllers/GuestbookController.php
04. Updating project profile '.zfproject.xml'
05. Creating a view script for the sign action method
06. at application/views/scripts/guestbook/sign.phtml
07. Updating project profile '.zfproject.xml'
Как видим в результате, это создаст метод signAction() в нашем контроллере, а также соответствующий скрипт вида.
Давайте добавим некоторую логику в действие (action) sign нашего контроллера гостевой книги. Во-первых мы должны проверить получили ли мы POST или GET запрос; в последнем случае мы просто отображаем форму. Однако, если мы получим POST запрос, мы должны проверить post-данные нашей формы, и, если они правильные, создать новую запись и сохранить ее. Логику можно представить следующим образом:
01. // application/controllers/GuestbookController.php
02.
03. class GuestbookController extends Zend_Controller_Action
04. {
05. // тут вырезан (snipping) indexAction()...
06.
07. public function signAction()
08. {
09. $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. }
Само собой разумеется, мы должны отредактировать view-скрипт; отредактируйте application/views/scripts/guestbook/sign.phtml следующим образом:
01. <!-- application/views/scripts/guestbook/sign.phtml -->
02.
03. Пожалуйста, используйте форму ниже, чтобы воспользоваться нашей гостевой книгой!
04.
05. <?php
06. $this->form->setAction($this->url());
07. echo $this->form;
Замечание: Улучшение вида форм
Original (English): Zend Framework Quick Start. Create A Form
