---
title: "Zend Framework: создаем блог. Шаг 3"
description: "Продолжаем изучать Zend Framework на примере разработки блога. Сегодня мы займемся комментариями, а ..."
author: "KanatYvi"
published: "2011-02-18T02:26:14+00:00"
modified: "2014-10-06T07:27:19+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/zend-framework-sozdaem-blog-shag-3-121915"
markdown_url: "https://yvision.kz/post/zend-framework-sozdaem-blog-shag-3-121915/markdown"
site_name: "Yvision.kz"
---

# Zend Framework: создаем блог. Шаг 3

> Продолжаем изучать Zend Framework на примере разработки блога. Сегодня мы займемся комментариями, а ...

Продолжаем изучать Zend Framework на примере разработки блога. Сегодня мы займемся комментариями, а именно их добавлением.

Давайте как всегда начнем с модели. Нам нужен метод для вставки данных в БД. Напишем его:

``` $postId, 'name' => $name, 'email' => $email, 'url' => $url, 'blog_comment' => $comment, ); $this->insert($data); }} ```

Метод add() принимает данные комментатора и вставляет их в БД. Теперь нам нужно вывести саму форму и затем ее обработать. За формы отвечает компонент Zend_Form. Давайте сгенерируем при помощи Zend_Tool нашу форму:

``` zf create form Comment ```

Эта команда создаст каталог application/forms и файл Comment.php в нем. Приведу как всегда готовый код и после поясню:

``` addFilter('Int'); // Создаем новое текстовое поле для имени $name = new Zend_Form_Element_Text('name'); $name->setLabel('Имя') // label для текстового поля ->setRequired(true) // Поле обязательное ->addFilter('StripTags') // Удаляем HTML-теги ->addFilter('StringTrim') // Удаляем лишние пробелы ->addValidator('NotEmpty'); // Поле не должно быть пустым // Мыло $email = new Zend_Form_Element_Text('email'); $email->setLabel('Мыло') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('regex', true, array('/^[a-z0-9]+@[a-z0-9]+\.[a-z0-9]{2,4}$/')) ->addValidator('NotEmpty'); // URL $url = new Zend_Form_Element_Text('url'); $url->setLabel('URL') ->setRequired(false) ->addFilter('StripTags') ->addFilter('StringTrim'); // Коммент $comment = new Zend_Form_Element_Textarea('blogComment'); $comment->setLabel('Коммент') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); // Кнопка сабмита $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Откомментить'); // Добавдение всех элементов в форму $this->addElements(array($postId, $name, $email, $url, $comment, $submit)); } } ```

Как видите наш класс наследуется от Zend_Form. Метод init() уже был сгенерирован, код нашей формы мы пишем внутри него. Здесь мы создаем элементы формы. Первый элемент - скрытое поле, где будет храниться идентификатор поста. Ему мы добавляем фильтр, который гарантирует, что значение будет типа integer. Далее текстовое поле для имени комментатора. Его мы делаем обязательным, экранируем теги и удаляем лишние пробелы. Также добавляем фильтр NotEmpty, т.е. поле не должно быть пустым. Для поля e-mail'а устанавливаем проверку почтового адреса с помощью регулярного выражения. Второй параметр true обозначает, что если проверка не пройдена, дальше ничего не проверять. Поле URL делаем не обязательным. Затем инициализируем кнопку сабмита и наконец добавляем все созданные элементы в форму.

Теперь обработаем форму. Делать это мы будем в методе postAction() нашего контроллера indexController.

``` _getParam('id', 0)); if ($id > 0) { // Создаем экземпляр модели постов и выбираем посты по ID $post = new Application_Model_DbTable_Posts(); $this->view->post = $post->getById($id); // Устанавливаем заголовок для поста в тег title $this->view->postTitle = $this->view->post['title']; $this->view->headTitle($this->view->postTitle); // Получаем комменты к посту $comments = new Application_Model_DbTable_Comments(); $this->view->comments = $comments->getByPostId($id); // Форма $form = new Application_Form_Comment(); // Устанавливаем value для скрытого элемента postId $form->postId->setValue($id); // Передаем форму во вьюшку $this->view->form = $form; // Если произведен запрос методом POST, т.е. форма отправлена if ($this->getRequest()->isPost()) { // Получаем данные и проверяем на валидность $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { // Берем значения из формы $postId = intval($form->getValue('postId')); $name = $form->getValue('name'); $email = $form->getValue('email'); $url = $form->getValue('url'); $comment = $form->getValue('blogComment'); // Вставляем в БД $comments->add($postId, $name, $email, $url, $comment); // Редирект $this->_helper->redirector('post', 'index', null, array('id' => $postId)); } else { // Если валидация не пройдена, заполняем форму введенными данными $form->populate($formData); } } } }} ```

здесь мы создаем экземпляр класса Application_Form_Comment(), устанавливаем значение для скрытого элемента postId и передаем форму во вью. Затем проверяем была ли отправлена форма. Если да, то получаем данные и проверяем на валидность. Если все ОК - вставляем данные в БД и редиректим юзверя. А если нет, то возвращаемся назад и вставляем введенные данные снова в форму.

И наконец выведем форму. Для этого в файл application/views/scripts/index/post.phtml после блока комментариев добавляем:

```

### Оставить коммент: form ?> ```

На этом сегодняшний урок подошел к концу. Сделано не мало, но впереди еще много всего. В следующий раз наверное немного украсим нашу форму с помощью декораторов и может быть напишем свой хелпер. Исходники лежат [здесь](http://gailimov.info/files/zftest.tar.gz). Пока :).

Оригинал [Zend Framework: создаем блог. Шаг 3](http://gailimov.info/post/zend-framework-sozdaem-blog-shag-3/)

---

Source: [https://yvision.kz/post/zend-framework-sozdaem-blog-shag-3-121915](https://yvision.kz/post/zend-framework-sozdaem-blog-shag-3-121915)