4. Что такое Mojolicious?
• Веб-фреймворки:
Mojolicious::Lite, Mojolicious, Mojo
• Объектно-ориентированное API,
без скрытой магии и зависимостей,
написанное на чистом Perl
• Полный стек HTTP 1.1 и WebSocket #76
(клиент-сервер), а также IPv6, SSL и IDNA
5. Что такое Mojolicious?
• Асинхронный ввод-вывод, prefork-веб сервер
с поддержкой epoll и kqueue,
unix-сокетов и «горячей» разработки
• CGI, FastCGI и PSGI
• RESTful-роутеры, плагины, сессии,
Perl-ish шаблонизатор, поддержка I18N,
JSON и XML DOM с CSS3-селекторами
14. use Mojolicious::Lite;
post '/:name' => sub { # /*
my $self = shift;
my $name = $self->param('name');
$self->render_text( "Привет $name!" );
};
app->start;
15. use Mojolicious::Lite;
post '/:name' => sub { # /*
my $self = shift;
my $name = $self->stash('name');
$self->render_text( "Привет $name!" );
};
app->start;
16. use Mojolicious::Lite;
post '/:name' => { id => 42 } => sub { # /*
my $self = shift;
my $name = $self->param('name');
warn $self->param( 'id' );
$self->render_text( "Привет $name!" );
};
app->start;
17. use Mojolicious::Lite;
any '/time' => 'clock';
app->start;
__DATA__
@@ clock.html.ep
% my ($sec, $min, $hour) = (localtime)[0, 1, 2];
Текущее время
<%= $hour %>:<%= $min %>:<%= $sec %>
18. use Mojolicious::Lite;
websocket '/echo' => sub {
my $self = shift;
$self->receive_message(
sub {
my ($self, $msg) = @_;
$self->send_message( "тук-тук: $msg" );
}
);
};
20. use Mojolicious::Lite;
get '/fetch' => sub {
my $self = shift;
$self->render_data(
$self->client
->get( 'http://2010.yapcrussia.org' )
->res
->body
);
};
21. use Mojolicious::Lite;
plugin charset => { charset => 'UTF-8' };
#
under sub {
my $self = shift;
# проверка авторизации
};
get '/foo' => sub { ... };
27. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->route('/:controller/:action/:id')
->to('example#welcome', id => 1);
}
1;
28. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->route('/:controller/:action/:id')
->to('example#welcome', id => 1);
}
1;
29. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->route('/:controller/:action/:id')
->to('example#welcome', id => 1);
}
1;
30. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->route('/:controller/:action/:id')
->to('example#welcome', id => 1);
}
1;
31. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
my $b = $r->bridge->to('auth#check);
$b->route('/admin')->to('admin#welcome');
}
32. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
$self->plugin(charset => { ... });
$self->types->type(json => 'text/plain');
$self->renderer->root( ... );
}
1;
33. package App;
use base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->route('/:controller/:action/:id')
->to('example#welcome', id => 1);
}
1;
34. package App::Example;
use base 'Mojolicious::Controller';
sub welcome {
my $self = shift;
warn $self->param( ‘id’ );
$self->render( message => 'Привет Киев!' );
}
1;
35. package App::Example;
use base 'Mojolicious::Controller';
sub welcome {
my $self = shift;
warn $self->stash( ‘id’ );
$self->render( message => 'Привет Киев!' );
}
1;
75. Любая модель данных
может быть использована
в Mojolicious
DBI, DBIx::Class, Fey::ORM, CouchDB, MongoDB, ...
76. Документация
• Пока мало документации, зато очень
хороший фидбек :)
• Mojolicious::Lite и Mojolicious::Guides
• Mojolicious Handbook @kvorg
• Mojolicious FAQ @vti