Hatena::ブログ(Diary)

Perl日記 このページをアンテナに追加 RSSフィード

2010-06-27

[]Catalystで知ったこと

PerlフレームワークCatalyst完全入門

PerlフレームワークCatalyst完全入門

買って読み始めたので、知ったことメモ。


フォームデータの取得

今まで。

my $id = $c->req->param('id');

ただしこれだと、

しかし、paramメソッドはクエリ情報→ポストデータの順で値の取得を試みます。このため、クエリ情報/ポストデータの間で同名のパラメータがあった場合、意図しないデータを取得してしまう恐れがあるのです。

(P76)

なるほど。

これを避けるために、とても丁寧に記述するなら、こう。

# POST データ
my $id = $c->req->body_params->{'id'};

# GET データ
my $id = $c->req->query_params->{'id'};

名前なしのクエリ情報

これはCatalystとは直接関係ないか。

GETでURLにクエリを追加する場合、値がひとつだけなら、key に相当する部分を省略できるらしい。

http://mysearching/search?Perl

受け取り方。

my $search_word = $c->req->query_keywords;
#=> Perl

ほお。


リクエストヘッダの全取得

リクエストヘッダは個別にはこう取れる。

my $user_agent = $c->req->header('User-Agent');

一気にオブジェクトとして取得するには、以下。

my $headers = $c->req->headers;

返却値は、HTTP::Headersオブジェクト

my $user_agent = $headers->header('User-Agent');

TTでHTML以外

Template Toolkitで以下のようなテンプレートを作る。

[%- FOREACH item = list -%]
[% item.isbn %],[% item.title %],[% item.price %]
[%- END -%]

呼び出す方は、

# レスポンスヘッダに設定
$c->res->header(
  'Content-Type' => 'application/octet-stream',
  'Content-Disposition' => 'attachment; filename = "myfile.csv"',
);
# 置換データ
$c->stash->{list} = [@data];

この状態でアクセスがあると、普段のHTMLではなくて、CSVの保存確認ダイアログが開かれる。

Content-Type が octet-stream だからなんだろうな。

TT自体はそのことは全く関係しないってことか。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/rightgo09/20100627/p1