use Mojolicious::Lite #use strict; use warings;が有効になる
■Controller
get[or post] ''
■開発サーバ
$morbo myapp.pl
で
http://localhost:3000/
ファイルが更新されたら自動的にリロードされるので再起動する必要はない。
Ctrl + cで終了
■Controller
・ルート
get[or post] 'ルート' => sub{};
'/'
http://localhost:3000/
'/foo'
http://localhost:3000/foo
'/foo/bar'
http://localhost:3000/foo/bar
'/:foo/:bar'
http://localhost:3000/任意の文字列1/任意の文字列2
get '/:foo/:bar' => sub{
my $self = shift;
my $foo = $self->param('foo');
my $bar = $self->param('bar');
}
で取得できる。
・get(クエリの取得)
http://localhost:3000/?date=20120812&title=abc
get '/' => sub{
my $self = shift;
my $params = $self->req->params->to_hash;
my $date = $params->{date};
my $title = $params->{title};
}
・post(ポストデータの取得)
post '/' => sub{
my $self = shift;
my $params = $self->req->body_params->to_hash;
my $date = $params->{date};
my $title = $params->{title};
}
・get/postどちらでも対応できる書き方
my $変数 = $self->param('[Query名] or [name属性]');
■View
・テキストの出力
$self->render_text('Hello World!');
・テンプレートの指定方法
$self->render('ルート名');
or
get[or post] '/' => sub{} => [ルート名]
@@ [ルート名].html.ep
・テンプレート
%で始まる行は、perlそのものを埋め込める
出力したい時は、<%= 変数名 %>で出力
@@ index.html.ep
% my @str = ('aaa', 'bbb', 'ccc');
% for my $v (@str){
<%= $v %>
%}
・データの受け渡し(stashにhashを渡す or renderにhashを渡す)
get '/bar' => sub {
my $self = shift;
$self->stash(one => 23);
$self->render('baz', two => 24);
};
__DATA__
@@ baz.html.ep
The magic numbers are <%= $one %> and <%= $two %>.
・共通部分
例えばHTMLのbodyの中身以外共通だとすると
layoutsで初め、何かしらの名前をつけておき.html.epとする。
共通部分は、<%= content %>としておき
@@ layouts/hogehoge.html.ep
<%= content %>
@@ 名前.html.ep
% layout '何かしらの名前';
としておけばそれ以降に書いた内容は
<%= content %>に表示される。
・共通部分のうち一部動的な時
例えばタイトルが動的な場合、そこを変数にしてしまい後で変数で渡す。
@@ index.html.ep
% layout 'default';
% title 'Welcome';
Hello World!!!
@@ layouts/default.html.ep
<%= content %>
■他
<%= url_for('ルート名', hash) %>
redirect_to('ルート名', hash)
■参考:ヘルパーコマンド
$ mojo generate lite_app hello.pl
----------------------------------------------------------------------------------
app Generate Mojolicious application directory structure.
lite_app Generate Mojolicious::Lite application.
makefile Generate "Makefile.PL".
plugin Generate Mojolicious plugin directory structure.
----------------------------------------------------------------------------------
↓こんなコードが作られる。
#!/usr/bin/env perl
use Mojolicious::Lite;
# Documentation browser under "/perldoc"
plugin 'PODRenderer';
get '/' => sub {
my $self = shift;
$self->render('index');
};
app->start;
__DATA__
@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!
@@ layouts/default.html.ep
<%= content %>