目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

Dancerを試してみた 2

Dancerを試してみた 1 の続き、まだまだ基本事項。

連休中は、山に籠もってPCが使えないのでとりあえずの内容を記述します。

HTTPリクエストのハンドリング

/locationA に対するGETメソッドに応答するアクションを定義しています。

get '/locationA' => sub {
    # hogehoge
};

/locationB に対する全てのHTTPメソッドに応答するアクションを定義しています。

any '/locationB' => sub {
    # hogehoge
};

/locationCに対するGETおよびPOSTメソッドに応答するアクションを定義しています。

any ['get', 'post'] '/locationC' => sub {
    # hogehoge
};

テンプレート

Viewにテンプレートを使用します。
テンプレートには2種類あります。

  • view アクションの内容(content)のレイアウトを規定
  • layout ページ全体のレイアウトを規定

layoutとviewの包含関係は以下のような感じ

+-- layout -----------------------+
|                                 |
| +------ view ----------------+  |
| |                            |  |
| |                            |  |
| +----------------------------+  |
|                                 |
+---------------------------------+

下記は、viewおよびlayoutの例。
viewは/views、layoutは/views/layoutsに置きます。

# layoutにmain.tt、viewにmain.ttを使った例
get '/hello/:name' => sub {
    my $name = params->{'name'};
    layout 'main';
    template 'hello.tt', { name => $name };
};

viewの例、デフォルトでは<%と%>で囲まれた部分にパラメータが代入されます。

<!-- hello.tt -->
Hello there, <% name %>!

layoutの例、<% content %>の部分にviewの内容が代入されます。

<!-- main.tt -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>practiceA</title>
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Hello</h1>
<div id="content">
<p><% content %></p>
</div>
<div id="footer">
Powered by <a href="http://perldancer.org/">Dancer</a> 
</div>
</body>
</html>

ロギング

debug、warning、errorの三つの重要度が定義されています。

下記はログ出力だけするアクションの例。ログファイルにそれぞれdebug、warning、errorが記録されます。

get '/logging' => sub {
    debug   "output debug   log";
    warning "output warning log";
    error   "output error   log";
};

ログ出力の例。ログは/logs/*.logに出力されます。

Fri Apr 30 10:43:29 2010 [4076] (debug) output debug   log in D:/Perl/site/lib/Dancer.pm l. 77
Fri Apr 30 10:43:29 2010 [4076] (warning) output warning log in D:/Perl/site/lib/Dancer.pm l. 126
Fri Apr 30 10:43:29 2010 [4076] (error) output error   log in D:/Perl/site/lib/Dancer.pm l. 79

設定ファイルには下記のように記述します。
設定ファイルは/connfig.yml(グローバル設定)、もしくは/environments/*.yml(実行環境ごとの設定)です。*の中身は実行環境名が入ります。

logger: 'ファイル名'
log: 'debug'     # debug, warning, errorを記録
#log: 'warning'   # warning, errorを記録
#log: 'error'     # errorのみ記録

続く? 時間切れなので連休後に書きます。