Catalystで知ったこと
- 作者: 山田祥寛
- 出版社/メーカー: インプレスジャパン
- 発売日: 2010/05/20
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 214回
- この商品を含むブログ (18件) を見る
買って読み始めたので、知ったことメモ。
フォームデータの取得
今まで。
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自体はそのことは全く関係しないってことか。