Использование MongoDB в Catalyst. Часть 1. Примеры кода

Разработка панели администратора, для доступа к системе логов. Создание модели для работы с MongoDB в Catalyst. Создание контроллера и tt-шаблонов для панели администратора. Взаимодействие с MongoDB, выборка данных, сортировка, использование лимитов, поиск одной-единственной записи. Получение списка всех доступных баз данных Mongo. Использование Variable::Eject. Простые примеры кода.

 

Задача

MongoDB используется для хранения логов. Требуется создать панель администратора, заходя в которую, администратор сможет просматривать все записи таблицы (сорри за терминологию, просто так привычнее) с логами. Для начала можно создать всего две страницы:

  • первая - это таблица с записями, 20 записей на одной странице
  • вторая - это подробная исформация о каждой записи.

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

Приведенный код строится на ранее созданной основе:

 

1. Создаем модель для работы с MongoDB

/lib/app/Model/MongoDB.pm :

Catalyst::Model::MongoDB используется в качестве базового класса для создания модели MongoDB. Требуется только задать параметры подключения к БД, и модель можно использовать.

 

2. Создаем контроллер

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

Возможно, создание страницы для отображения конкретной записи в данном примере не оправдано, т.к. там выводятся все те же данные, что и в основной таблице. Однако, в дальнейшем страница будет полезна для добавления на нее формы редактирования записей, полного списка полей (которых может быть намного больше, чем в приведенном примере), комментариев и дополнительной информации.

/lib/app/Controller/Log/ApiLog.pm :

 

Использование Variable::Eject

Variable::Eject - отличный модуль, который позволяет извлекать из указанного хеша значения для переменных. Предварительно объявлять переменные нет необходимости.

 

3. Создаем шаблон для главной страницы со списком логов

/root/src/log/api_log/index.tt :

 

4. Создаем шаблон для странички с полным описанием одной записи из таблицы логов

/root/src/log/api_log/element.tt :

 

5. Создаем файл css

Страницы панели администратора выглядят просто ужасно. Для того, чтобы облагородить их вид, можно использовать CSS. Я привела только начало файла (просто для того, чтобы обозначить появление данного файла в текущих доработках кода), остальное можно дописать по собственному усмотрению.

/root/static/css/admin.css :

 

6. Запускаем сервер и проверяем работоспособность кода

Запуск сервера. Для разнообразия - под портом 3001.

Главная страница, которая содержить список из 20 последних записей в БД Mongo:

Использование параметров page и limit позволяет организовать постраничный просмотр. По-умолчанию, page имеет значение 0 и открывает первую страницу, а limit имеет значение 20.

Страница с подробным содержимым конкретной записи в БД. На эту же страницу можно добавить формы для редактирования данных.

 

Полезные ссылки по теме MongoDB и Catalyst

search.cpan.org: MongoDB

search.cpan.org: Catalyst::Model::MongoDB

search.cpan.org: MongoDB::MongoClient

search.cpan.org: MongoDB::Collection

search.cpan.org: MongoDB::OID

search.cpan.org: MongoDB::Cursor

search.cpan.org: Variable::Eject

The Little MongoDB Book (Маленькая книга о MongoDB) - на русском