mojolicious/ 0000775 0005402 0005402 00000000000 12035156137 013015 5 ustar travis travis mojolicious/mojolicious.html 0000664 0005402 0005402 00000022745 12035155361 016247 0 ustar travis travis
Mojolicious
The bits Lenz didn't talk about yet
Mojolicious
1. Bootstrapping
Create Your Application
$ mojo generate app MyApp [mkdir] ~/my_app/script [write] ~/my_app/script/my_app [chmod] my_app/script/my_app 744 [mkdir] ~/my_app/lib [write] ~/my_app/lib/MyApp.pm [mkdir] ~/my_app/lib/MyApp [write] ~/my_app/lib/MyApp/Example.pm . . .
Basic File structure
2. Off and running
Development server
$ ./script/my_app -l http://*:3000 [-l https://*:443]
$ morbo script/my_app -l http://*:3000 [-l https://*:443]
Production Server
$ plackup ./script/my_app HTTP::Server::PSGI: Accepting connections at http://0:5000/
$ hypnotoad script/my_app Server available at http://127.0.0.1:8080. + preforking server + supports hot deployment
Sample server config
upstream myapp { server 127.0.0.1:8080; } server { listen 80; server_name localhost; location / { proxy_read_timeout 300; proxy_pass http://myapp; proxy_set_header Host $host; proxy_set_header X−Forwarded−For \ $proxy_add_x_forwarded_for; proxy_set_header X−Forwarded−HTTPS 0; } }
3.Routing
Basic Routing
my $r = $self->route(); $r->route('/users/list')->to('users#list'); # lib/MyApp/Users.pm # sub list {}
$r->post('/users/create')->to('users#create'); # lib/MyApp/Users.pm # sub create{}
More Advanced
my $r = $self->route(); my $admin_route = $r->bridge('/users/admin/:id') ->to('users#admin');
$admin_route->route('/edit')->to('users#edit');
$admin_route->route('/delete')->to('users#delete');
package MyApp::Users; use Mojo::Base 'Mojolicious::Controller'; sub admin { my $self = shift; my $id = $self->param('id'); # from placeholder my $user = $self->db->get_user($id); # from your db $self->stash(user => $user); } sub edit { my $self = shift; my $user = $self->stash->{user}; }
Even more advanced
my $authenticated_user_route = $r->bridge('/users') ->over( is => 'admin' )->to('users#authenticate'); my $user_admin_route = $authenticated_user_route->bridge('/admin/:id') ->to('users#admin');
$user_admin_route->route('/edit') ->name('edituser')->to('users#edit'); my $edit_route = $user_admin_route ->bridge('/edit')->to('users#setup_edit'); $edit_route->get('')->name('edituser')->to('users#edit'); $edit_route->post('')->to('users#post_edit');
<a href="<%= url_for('edituser',id => 23) %>">edit</a> - generates {{http://myapp.com/users/admin/23/edit}}
4. Template System
<% Perl code %>
<%= Perl expression, replaced with XML escaped result %> <%== Perl expression, replaced with result %> <%# Comment, useful for debugging %> <%% Replaced with "<%", useful for generating templates %> % Perl code line, treated as "<% line =%>" %= Perl expression line, treated as "<%= line %>" %== Perl expression line, treated as "<%== line %>" %# Comment line, treated as "<%# line =%>" %% Replaced with "%", useful for generating templates
5. Conclusion
- no external dependencies! (That's a good thing)