#!/usr/bin/perl
use Dancer;

get '/' => sub {
	'Hello world!'
};

dance;
Я уже рассказывал про Catalyst и Mojo, а сегодня хочу рассказать о современном и быстроразвивающемся фрэймворке Dancer. Как заявляют разработчики — это самый простой способ написать веб-приложение на Perl. И действительно, для этого потребуется всего несколько строк, можете оценить пример справа.

Совсем не похоже на привычный Perl, некоторые из вас могут даже заметить сходство с Ruby, а если быть точным, то Ruby фрэймворком Sinatra. Именно им и вдохновляются разработчики Dancer и получается весьма интересно!

Perl фрэймворк Dancer

Сейчас я расскажу как установить Танцора и покажу немного Perl-магии.

Установка

Первый и самый привычный способ — это установка через CPAN:
cpan Dancer
Второй способ — получить самую свежую сборку с github
git clone git://github.com/sukria/Dancer.git
cd Dancer
perl Makefile.PL
make && make test && sudo make install

Запуск

Для генерации каркаса выполним команду
dancer -a firstapp
В результате получаем логичную структуру файлов и директорий. В config.yml хранятся настройки приложения в формате YAML. Файл firstapp.pl используется для запуска приложения. В директории lib находится код нашего приложения, в views шаблоны и обёртка сайта, в logs и t, очевидно, логи и тесты.

Perl фрэймворк Dancer


Запустив сервер и перейдя по адресу http://localhost:3000/, мы должны увидеть что-то похожее на:

Perl фрэймворк Dancer


Синтаксис

Рассмотрим небольшой отрывок кода:
get '/hello/:name' => sub {
		return "Hello ".params->{name};
	};
Первое слово get задает метод для которого должно сработать это событие. Dancer поддерживает все стандартные HTTP методы: GET, POST, PUT, DELETE. Также их все можно объединить с помощью ключевого слова any или несколько из них с помощью конструкции вида any[‘post’,’del’]. Кроме того существует метод ajax, который срабатывает при аякс запросах, а если быть точным, то при запросах с флагом X_REQUESTED_WITH установленным в XMLHttpRequet.

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

  • конструкция вида :key создает/получает параметр key из строки запроса
    get '/hello/:name' => sub {
    		return "Hello ".params->{name};
    	};
  • можно использовать спецсимвол снежинка (*) для получения частей адреса, доступ к результату можно получить через директиву splat
    get '/download/*.*' => sub {
    		my ($file, $ext) = splat;
    	};
  • работают регекспы, для этого нужно использовать ключевое слово r
    get r( '/hello/([\w]+)' ) => sub {
    		my ($name) = splat;
    		return "Hello $name";
    	};
По умолчанию в Танцоре используется свой простой шаблонизатор, но всегда можно подключить любимый Template Toolkit, для этого нужно подключить модуль Template в вашу программу. Интересно, что TT в Dancer настроен таким образом, что использует скобки <% %> вместо своих обычных [% %]. Но если сильно захотеть, то это можно поменять в настройках.

Для того, чтобы передать управление шаблонизатору, нужно использовать ключевое слово template и передать ему название шаблона и хэш массив с данными для рендеринга.
use Dancer;
use Template;

get '/hello/:name' => sub {
	template 'hello' => { number => 42 };
};
Кроме шаблона в Dancder создается и обёртка сайта, куда можно вынести общую для всех страниц верстку: заголовки, меню, футеры. По сути это такой же шаблон в котором вызов <% content %> заменяется на результат для текущего экшена. Обёртку можно задавать при помощи ключевого слова layout:

use Dancer;
layout 'main';
	
get '/nolayout' => sub {
	template 'some_ajax_view',
		{ tokens_var => "42" },
		{ layout => 0 };
};
Если вы дочитали до этого места, то могу вас поздравить, у вас есть все необходимые знания для того, чтобы написать свое собственное веб-приложение на Dancer!
299 просмотров
нет комментариев
Только зарегистрированные пользователи могут оставлять комментарии.
Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
© sontan.name, 2008–2010