Translate

2012年8月12日日曜日

Mojolicious-Liteメモ

■モジュール読み込み
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


<%= title %>
<%= 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


<%= title %>
<%= content %>