1.5 Zend Framework — Быстрый старт. Создание формы

Zend, “Zend Framework Quick Start. Create A Form”, public translation into Russian from English More about this translation.

Translate into another language.

Для нашей гостевой книги еще необходима форма для отправки новых записей.

Наша первоочередная задача это создать класс формы. Что бы создать пустой класс формы выполните:

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;

Замечание: Улучшение вида форм

Никто не будет восхищаться красотой этой формы в ближайшее время. Это не имеет значения — внешний вид форм полностью настраиваемый! Более подробно смотрите раздел декораторов (decorators) в справочном руководстве.

Дополнительно вас может заинтересовать наше обучающее руководство по декораторам форм.

Примечание: Контрольная точка

Теперь перейдите на "http://localhost/guestbook/sign". Вы увидите следующее в вашем браузере:

learning.quickstart.create-form.png

Pages: ← previous Ctrl next
1 2

Original (English): Zend Framework Quick Start. Create A Form

Translation: © antdmi, Денис, Владимир .

translatedby.com crowd

Like this translation? Share it or bookmark!