Использование HTML::FormFu при работе с Catalyst

Введение в тему использования HTML::FormFu под Catalyst. Очень простые примеры, комментарии. Руководство для начинающих. Как создавать и обрабатывать формы.

Изначально, статья была написана специально для журнала "Pragmatic Perl" (см. оригинал). Для блога разделила публикацию на две части.

Все примеры были выполнены специально для публикации, в windows-среде, под Strawberry Perl.

 

Создаем интерфейс администратора с помощью HTML::FormFu и Catalyst

Панель администратора - это скрытый от обычных посетителей блок сайта, который позволяет владельцу осуществлять управление контентом сайта и принципами его отображения. Например, настроить список используемых виджетов, добавить новые публикации, разместить баннеры и т.п.

Почти вся админка - это бесконечное число разнообразных форм. Использование менеджера форм тут более чем оправдано.

Поэтому, в качестве простого примера, создадим примитивный интерфейс администратора:

  • главную страницу панели администратора
  • страницу со списком публикаций на сайте
  • страницу для редактирования статей (на основе HTML::FormFu)
  • страницу для создания новой публикации (на основе HTML::FormFu)

Кроме того, позволим пользователю удалять статьи.

 

Дамп БД

Для начала, нам потребуется база данных. Ниже - дамп БД, которая использовалась для приведенных примеров. Установить БД, если ее у вас нет, лучше еще до начала установки Catalyst с его модулями для создания моделей.

Теперь просто создаем таблицу и следим за кодировками, дабы избежать проблем в будущем. Как современные люди, мы выбираем utf-8.

 

Главная страница панели администратора

Для максимально удобной работы с HTML::FormFu в Catalyst, существует модуль Catalyst::Controller::HTML::FormFu . Если планируем в создаваемом контроллере использовать менеджер форм, подключаем Catalyst::Controller::HTML::FormFu с помощью extends.

Создать форму можно, либо определив ее параметры в непосредственно в коде, либо - по конфигурационному файлу. Конфигурационный файл предпочтительней. Во-первых, это все-таки элементы html-кода, и уже давно стало хорошим правилом отделять разметку от кода. Во-вторых, при создании панели администратора в боевых условиях, форм будет очень много, и удобнее хранить их отдельно.

Чтобы создать форму, нужно задать в атрибутах Catalyst action - :FormConfig(). Если не указать путь к форме в атрибуте :FormConfig, система решит, что в качестве имени формы следует использовать имя action. Поиск файла будет осуществляться примерно по такому пути: root/forms/controller_name/action_name.yml

Наличие атрибута :FormConfig говорит системе, что требуется создать объект формы и разместить его
в хранилище Catalyst - $c->stash->{form} . Чтобы вывести форму на html-странице, достаточно добавить в шаблон инструкцию: [% form %] . form - это полностью готовый блок html-кода формы.

Проверить, была ли отправлена форма и корректны ли ее данные, можно с помощью метода $form->submitted_and_valid.

Другой метод, позволит получить данные из полей формы: $form->param_value('field_name') . Кроме того, можно получить значения полей формы с помощью $c->req->param('field_name').

 

Модуль /lib/MyApp/Controller/Admin.pm

 

Шаблон /root/src/admin/index.tt

Переходим в директорию root. Создаем в ней каталог src. В каталоге src создаем каталог admin.

Не забываем, что все шаблоны должны быть в кодировке UTF-8 .

Для наглядности, tt-шаблоны не содержат никакого html-кода, кроме самого необходимого.

 

Работа с публикациями

Модуль /lib/MyApp/Controller/Admin/Articles.pm

Один модуль будет отвечать и за отображение списка публикаций, и за создание новых, редактирование старых, и за удаление статей.

Метод default_values() - позволяет задать значения "по-умолчанию" полям формы, то, что увидит пользователь, если откроет страницу с формой.

Можно использльзовать метод $form->submitted , чтобы понять - была форма отправлена или нет. Форма может быть отправлена, но не пройти валидацию. Метод $form->submitted_and_valid учитывает и отправку, и благополучное прохождение валидации.

 

Шаблон /root/src/admin/articles.tt

 

Шаблон /root/src/admin/article/update.tt

 

Шаблон /root/src/admin/article/create.tt

 

CSS-стили для формы /root/static/style.css

Добавим совсем простую css-таблицу, которая позволяет аккуратно вывести элементы формы. В дальнейшем, css можно усложнить, создавая с его помощью профессиональное оформление всей панели администратора.

 

YML-конфиг для формы /root/forms/article/update.yml

По-умолчанию, catalyst-приложение будет искать формы в директории root/forms . Для работы с конфигурационными файлами, Catalyst::Controller::HTML::FormFu использует Config::Any. Соответственно, хранить конфигурационную информацию о формах кроме yml-формата, можно в XML, JSON, конфигах в стиле Apache, perl-коде и т.п.

Переходим в директорию root. Создаем в ней каталог forms. В каталоге forms создаем каталог article и файл update.yml.

 

YML-конфиг для формы /root/forms/article/create.yml

Вот и все. Простой прототип панели администратора с использованием HTML::FormFu готов. Теперь, на основе полученных результатов, можно пробовать усложнять формы, вводить в работу сложные поля и правила валидации, добавлять JS для работы со сложными элементами, CSS для создания современного интерфейса.

 

Похожие публикации на блоге программиста

Что такое HTML::FormFu

Как создать Catalyst-приложение с нуля

 

Полезные ссылки по теме Catalyst и HTML::FormFu

Catalyst::Controller::HTML::FormFu

Dynamic forms with HTML::FormFu

HTML::FormFu. How FormFu works

Deflators в FormFu

Handles forms, so you don't have to

 

Использование HTML::FormFu при работе с Catalyst: 2 комментария

  1. serg

    девушка, в ваших статьях ничего нет об model('DB::Article')
    откуда должны взяться методы для их самому создавать или както можно сгенерировать?

    1. Natalie Автор записи

      Пример создания модели был в предыдущей заметке: https://dev-lab.info/2013/11/%D0%BA%D0%B0%D0%BA-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-catalyst-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/

      А это дополнительные материалы: http://search.cpan.org/~gbjk/Catalyst-Model-DBIC-Schema-0.65/lib/Catalyst/Model/DBIC/Schema.pm

      В данной заметке примеры кода сильно урезаны, чтобы выделить только самое главное.

Комментарии запрещены.