Catalyst::Helper

Catalyst.pl используют для быстрого создания каркаса catalyst-приложения. Сам скрипт catalyst.pl очень небольшой, единственное, что он делает — вызывает методы Catalyst::Helper, которые выполняют всю работу.

Пример вывода catalyst.pl:

После запуска catalyst.pl создается целая иерархия файлов, скриптов, директорий:

 

Скрипты, которые создает catalyst.pl

Кроме множества других файлов и директорий, catalyst.pl создает несколько скриптов, которые в дальнейшем используются для создания новых компонент, запуска простого web-сервера и т.п.

  • myapp_create.pl — Используется для создания новых компонентов catalyst-приложения: моделей, представлений, контроллеров. Пример:

     

  • myapp_server.pl -Тестовый web-сервер сatalyst. Запускается как http-демон. Выводит отладочную информацию либо на экран, либо в файл. Лично мне больше нравится использовать файлы, которые можно просматривать в произвольном направлении с помощью less, тогда как вывод логов на экран терминала позволяет посмотреть только ограниченное количество последних строк.

     

  • myapp_test.pl -Скрипт для запуска тестов из командной строки.
  • myapp_cgi.pl — Запускает ваше приложение как CGI.
  • myapp_fastcgi.pl -Скрипт позволяет запустить catalyst-приложение как приложение fastcgi.

«myapp» — в приведенных выше примерах, приставка, которая меняется в зависимости от того, какое вы зададите имя для вашего catalyst-приложения при создании каркаса.

 

Helpers

Helpers, «хэлперы», модули-помощники.

Скрипт myapp_create.pl позволяет создавать такие компоненты приложения как: модели, контроллеры, представления. Разновидностей каждого компонента может быть огромное количество. Например, поиск по фразе «Catalyst::View» возвращает более 100 ссылок на модули. Каждое из представлений в catalyst-приложении выполняет свой вид работы, нуждается в разных настройках и кодах. И это только представления. Естественно, модули могут регулярно обновляться, могут появляться новые View.

myapp_create.pl при всем желании, не сможет содержать в себе код, который используется для создания 100 различных типов представлений. Именно поэтому, myapp_create.pl отвечает только за прием входящих параметров и передачу их Catalyst::Helper, который в свою очередь, передает часть работы
соответствующим модулям-помощникам. Модуль-помощник содержит в себе код, необходимый для создания того или иного представления. Например, для того, чтобы создать представление TT будет вызваны функции модуля Catalyst::Helper::View::TT.

Каждый модуль-помощник может содержать в себе два метода:

  • mk_compclass — создает класс для компонента
  • mk_comptest — создает тест для компонента. Если метод отсутствует, тест не будет создан.

В самом деле, цепочка «передачи обязанностей» по созданию новой компоненты достаточно длинная. Примерное содержимое скрипта myapp_create.pl :

 

Т.е. myapp_create.pl получает задачу создать новую компоненту, вызывает для этого Catalyst::ScriptRunner, Catalyst::ScriptRunner вызывает
Catalyst::Script::Create, Catalyst::Script::Create вызывает Catalyst::Helper, который выполнив определенную работу, вызывает модуль-помощник для создания конкретной компонеты.

Если вы вызовете script/myapp_create.pl view TT TT, Catalyst::Helper, когда дело дойдет до него, попытается выполнить методы Catalyst::Helper::View::TT->mk_compclass и Catalyst::Helper::View::TT->mk_comptest.

Пространства имен для модулей-помощников:

  • Catalyst::Helper::Model::
  • Catalyst::Helper::View::
  • Catalyst::Helper::Controller::

 

Методы Catalyst::Helper

mk_compclass — Метод для создания компонента. Catalyst::Helper создает объект модуля-помощника, после этого вызывает для него метод mk_compclass(). Соответственно, в модуле-помощнике этот метод должен быть определен. Если помощник не содержит метод mk_compclass(), Catalyst::Helper передаст управление своему методу render_file().

mk_comptest — Аналогично описанному выше, но предназначено не для создания компоненты Catalyst, а теста для компоненты.

mk_stuff — Этот метод будет вызван, если пользователь не укажет тип компоненты: модель, представление или контроллер.

 

Внутренние методы Catalyst::Helper

render_file ($file, $path, $vars, $perms) — Формирует и создает файл из шаблона в блоке __DATA__, который размещают в конце файла модуля-помощника. Файл создается с помощью Template Toolkit.

  • $file — соответствующая часть __DATA__ секции,
  • $path — путь к файлу,
  • $vars — ссылка на хэш, которая требуется для Template Toolkit,
  • $perms — желаемые права доступа (если не указать, будут установлены значения по умолчанию)

get_file($class, $file) — Извлекает содержимое для файла из __DATA__ секции. Метод используется внутри render_file(). $class — имя класса из которого будут извлекаться данные.

Пример реального кода модуля-помощника:

 

mk_app — Создает каркас приложения Catalyst, вызывается скриптом catalyst.pl:

 

mk_component($app) — Создает новые компоненты Catalyst-приложения.

mk_dir($path) — Создает директорию.

mk_file($file, $content) — Добавляет извлеченный с помощью get_file() данные в указанный файл. Вызывается render_file().

next_test($test_name) — Вычисляет имя для следующего пронумерованного тестового файла и возвращает его.

render_file_contents — Обрабатывает Template::Toolkit шаблон.

render_sharedir_file — Формирует template/image файл из директории общего доступа.

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