# Controller package MyApp::Example; use base 'Mojolicious::Controller'; # Model use MyModel; sub welcome { my $self = shift; my $model = MyModel->new; my $stuff = $model->get_stuff_by_id($self->param('id')); # View $self->render_json($stuff->to_hash); }
$self->receive_message(sub { my ($self, $message) = @_; $self->send_message($message); });
$routes->route('/')->via('GET')->over(agent => qr/Firefox/)->to('example#welcome');
my $json_string = Mojo::JSON->new->encode({foo => {bar => 'baz'}});
page.html.ep -> NAME.FORMAT.TEMPLATE
package MyTestApp::I18N::de; use base 'MyTestApp::I18N'; our %Lexicon = (hello => 'hallo'); ... $self->plugin('i18n'); ... <%=l 'hello' %> # hallo
./my_app daemon --listen 'http://*:1234' ./my_app daemon_prefork ./my_app cgi ./my_app fastcgi ./my_app psgi
my $buffer = ''; my $loop = Mojo::IOLoop->singleton; my $server = $loop->connect( address => $host, port => $port, cb => sub { warn "Connected to $host:$port"; $loop->writing($_[1]) if length $buffer; } ); $loop->read_cb( $server => sub { $buffer = $_[2]; $loop->writing($server); } ); $loop->write_cb( $server => sub { $loop->not_writing($server); return $buffer; } ); $loop->start;
my $client = Mojo::Client->new; $client->get('http://examples.com/1'); $client->get('http://examples.com/2'); $client->get('http://examples.com/3'); $client->get('http://examples.com/4'); $client->process;
sub welcome { my $self = shift; # Pause $self->pause; $self->client->async->get('http://example.com' => sub { my $self = shift; # Resume $self->finish; })->process; }
open(HANDLER, "|mpg123 -") or die "Cannot pipe input: $!\n"; my $tx = Mojo::Transaction::HTTP->new; $tx->req->method('GET'); $tx->req->url->parse($url); $tx->res->body( sub { my ($res, $chunk) = @_; print HANDLER $chunk; } ); Mojo::Client->new->process($tx); close HANDLER;
Files=41, Tests=2272 # May 2010
use Test::Mojo; my $t = Test::Mojo->new(app => 'MyApp'); $t->get_ok('/welcome')->status_is(200) ->content_like(qr/Hello!/, 'welcome message!'); $t->post_form_ok('/search', {title => 'Perl', author => 'taro'})->status_is(200) ->content_like(qr/Perl.+taro/);
$routes->route('/')->via('GET')->over(agent => qr/Firefox/)->to('example#welcome');
$self->plugin('i18n');
$self->session(user => 'vti');
%# Layouts % layout 'wrapper'; %# Expressions <% $foo++ %> <%= $foo %> %# Blocks % for (1 .. 10) { * Hello 10 times % } %# Automatic xml escaping <%= '1 > 2' %>
# Lite app #!/usr/bin/env perl use 'Mojolicious::Lite'; get '/' => sub { my $self = shift; $self->stash(foo => 'bar'); } => 'welcome'; __DATA__ @@ welcome.html.ep <% $foo %> # Full app [mkdir] /private/tmp/my_app/script [write] /private/tmp/my_app/script/my_app [chmod] my_app/script/my_app 744 [mkdir] /private/tmp/my_app/lib [write] /private/tmp/my_app/lib/MyApp.pm ... [write] /private/tmp/my_app/templates/not_found.html.ep [exist] /private/tmp/my_app/templates [write] /private/tmp/my_app/templates/exception.html.ep [mkdir] /private/tmp/my_app/templates/layouts [write] /private/tmp/my_app/templates/layouts/default.html.ep [mkdir] /private/tmp/my_app/templates/example [write] /private/tmp/my_app/templates/example/welcome.html.ep