Предисловие
На Хабре очень мало, точнее совсем нет статей о таком замечательном MVC фреймворке, как Catalyst. И поэтому свою первую статью я решил посвятить именно ему.
Здесь я описал основные принципы для работы с Catalyst на примере простенького веб-приложения, так называемый быстрый старт для освоения данного фрейморвка
Введение
Catalyst — это мощный MVC фреймворк для разработки веб-приложений на Perl.
Пару слов об MVC (Model/View/Controller):
Catalyst — содержит обширное количество модулей CPAN, которые облегчают разработку веб-приложения на языке Perl.
В чем состоит простота при использовании данного фреймворка?
Процесс создания создания нового проекта выполняется с помощью команды:
Этот скрипт является частью вспомогательной системы, которая имеет название Catalyst::Helper, которая генерирует необходимые скрипты, папки, тесты, файлы и т.д для будущего приложения.
Структура созданного проекта:
Добавление необходимых моделей/видов/контроллеров производится с помощью соответствующей команды:
Содержимое файла TestApp.pm
Как мы видим Catalyst использует для объектного отображения используемых элементов CPAN модуль Moose, что значительно упрощает работу с объектами в языке Perl.
Файл Root.pm который находится в папке /lib/Test/App/Controller/ выглядит так:
Теперь после знакомства с этим фреймворком, попробуем создать простое веб-приложение.
1. Создадим вид с помощью команды
2. Создадим файл index.tt в папке root/
Вставляем туда этот код:
3. В файле Root.pm удаляем такую строчку:
4. там же добавляем метод hello:
5. Создаем модель
6. В созданной модели пишем метод:
7. Запускаем тестовый сервер
8. В браузере вводим
Любуемся результатом.
P.S. Вот в принципе основные идеи при работе с Catalyst, и хотелось бы побольше статей на хабре от, знающих этот фреймворк, людей. Документация конечно хорошо, а вот реальный опыт всегда интересней.
P.P.S. Пока писал эту статью и тут не обошлось без магии перла. В коде используется массив "@_", который транслируется в тэгах при указания языка перл в хабраюзера с именем "_", ничего красивого не придумал, как поставить пробелы между @ и _. Будьте внимательны…
На Хабре очень мало, точнее совсем нет статей о таком замечательном MVC фреймворке, как Catalyst. И поэтому свою первую статью я решил посвятить именно ему.
Здесь я описал основные принципы для работы с Catalyst на примере простенького веб-приложения, так называемый быстрый старт для освоения данного фрейморвка
Введение
Catalyst — это мощный MVC фреймворк для разработки веб-приложений на Perl.
Пару слов об MVC (Model/View/Controller):
- Модель (Model) — содержит только данные и методы для работы с ними.
- Вид(View) — отвечает за то, как именно эти данные будут выглядеть.
- Контроллер(Controller) — управляет связью между системой и пользователем, а также контролирует необходимые взаимодействия при работе приложения.
Catalyst — содержит обширное количество модулей CPAN, которые облегчают разработку веб-приложения на языке Perl.
В чем состоит простота при использовании данного фреймворка?
Процесс создания создания нового проекта выполняется с помощью команды:
catalyst.pl Test::App (в файловой системе в директории с названием проекта "::" будет заменен на "-".Этот скрипт является частью вспомогательной системы, которая имеет название Catalyst::Helper, которая генерирует необходимые скрипты, папки, тесты, файлы и т.д для будущего приложения.
Структура созданного проекта:
- /lib — сердце проекта, содержит весь perl код, предназначенный для работы веб-приложения, состоит из поддиректорий, созданных автоматически:
- Test/App/Model — для модулей реализующих модель;
- Test/App/View — … вид;
- Test/App/Controller — … контроллер;
- Test/App/App.pm — модуль, для настройки веб-приложения.
- /root — здесь хранятся шаблоны для View, необходимые css, js, изображения, вообщем все статические данные;
- /script — содержит скрипты, которые были автоматически созданы Helper'ом. Они необходимы для запуска:
- тестового сервера;
- тестирования определенного URL;
- создания компонентов MVC;
- запуска скриптов как CGI/FastCGI;
- и т.д.
- /t — содержит тесты
- Changes — история изменений вашего проекта.
- Makefile.PL — служебная инфорамация для установки необходимых модулей при развертывании приложения.
- test_app.conf — файл конфигурации, указываются служебные переменные (имеет наибольший приоритет, при запуске, чем настройки внутри приложения).
- README — информация о запуске приложения, его установки, настройки и т.д.
Добавление необходимых моделей/видов/контроллеров производится с помощью соответствующей команды:
script/test_app_create.pl {model|view|controller} {имя компонента}Содержимое файла TestApp.pm
package Test::App; use Moose; use namespace::autoclean; use Catalyst::Runtime 5.80; use Catalyst qw/ -Debug # включает режим отладки ConfigLoader # возможность настройки приложения Static::Simple # обслуживание статических файлов из /root /; extends 'Catalyst'; our $VERSION = '0.01'; __PACKAGE__->config( name => 'Test::App', disable_component_resolution_regex_fallback => 1, enable_catalyst_header => 1, # Send X-Catalyst header ); # стартует приложение __PACKAGE__->setup(); 1;
Как мы видим Catalyst использует для объектного отображения используемых элементов CPAN модуль Moose, что значительно упрощает работу с объектами в языке Perl.
Файл Root.pm который находится в папке /lib/Test/App/Controller/ выглядит так:
# содержит методы необходимые для взаимодействия с приложением, обработки запросов и генерации ответов. package Test::App::Controller::Root; use Moose; use namespace::autoclean; BEGIN { extends 'Catalyst::Controller' } __PACKAGE__->config(namespace => ''); # начальная страница, об этом говорит цифра Args(0), цифра внутри, указывает количество параметров в url (прим. test.com/1a/2b/3c при Args(1) получим "1b" и т.д) sub index :Path :Args(0) { my ( $self, $c ) = @ _; # Hello World $c->response->body( $c->welcome_message ); } # для всех остальных запросов, для которых не найдены соответствующие указания, генерирует ошибку 404 sub default :Path { my ( $self, $c ) = @ _; $c->response->body( 'Page not found' ); $c->response->status(404); } # метод, выполняющийся в конце обработки запроса sub end : ActionClass('RenderView') {} 1;
Теперь после знакомства с этим фреймворком, попробуем создать простое веб-приложение.
1. Создадим вид с помощью команды
script/test_app_create.pl view Web TT (ТТ — Template Toolkit, шаблонизатор, можно также использовать другие шаблонизаторы, Mason например)2. Создадим файл index.tt в папке root/
Вставляем туда этот код:
[% IF result %]<p>[% result %]</p> [% END %] <form name="hello" method=POST action="hello"> <input type="text" name="hi" value=""> <input type="submit" value="Do something!"> </form>
3. В файле Root.pm удаляем такую строчку:
$c->response->body( $c->welcome_message ); # вывод стандартного окна приветствия4. там же добавляем метод hello:
sub hello :Local { my ($self, $c) = @ _; my $hi = $c->req->body_params->{hi}; $c->stash( result => $c->model('Hello')->hello($hi), template => 'index.tt', ); }
5. Создаем модель
script/test_app_create.pl Model Hello
6. В созданной модели пишем метод:
sub hello { my ($self, $hi) = @ _; return "Hello $hi!\n"; }
7. Запускаем тестовый сервер
script/test_app_server8. В браузере вводим
localhost:3000/ (порт по умолчанию)Любуемся результатом.
P.S. Вот в принципе основные идеи при работе с Catalyst, и хотелось бы побольше статей на хабре от, знающих этот фреймворк, людей. Документация конечно хорошо, а вот реальный опыт всегда интересней.
P.P.S. Пока писал эту статью и тут не обошлось без магии перла. В коде используется массив "@_", который транслируется в тэгах при указания языка перл в хабраюзера с именем "_", ничего красивого не придумал, как поставить пробелы между @ и _. Будьте внимательны…