query_paramアクション
param
メソッドを使用してパラメータの値を取得するquery_param
アクションは次のようにRoot.pmに定義します。
package ParamSample::Controller::Root; # 省略 sub query_param :Local { my ( $self, $c ) = @_; # (1)titleパラメータを取得 $c->stash->{title} = $c->req->param( 'title' ); # (2)catパラメータを取得 my @cats = $c->req->param( 'cat' ); $c->stash->{category} = join(', ', @cats); # (3)テンプレートを指定 $c->stash->{template} = 'query.tt'; }
(1)titleパラメータを取得
Catalyst::Request
のparam
メソッドを使用して、title
パラメータの値を取得し、Stashに登録します。
(2)catパラメータを取得
Catalyst::Request
のparam
メソッドを使用して、cat
パラメータの値を配列として取得します。取得した配列はjoin
関数で連結し、カンマ区切りの文字列としてStashに登録します。
(3)テンプレートを指定
パラメータを表示するためのテンプレートファイルを指定します。次のURLをWebブラウザで表示させ、パラメータを入力して送信してみましょう。
http://<ホスト名またはIPアドレス><:Port>/select/param
title
やcategory
の値を入力して[送信]ボタンでquery_param
アクションを実行します。
query_parametersアクション
parameters
メソッドを使用してパラメータの値を取得するquery_parameters
アクションは次のようにRoot.pmに定義します。
package ParamSample::Controller::Root; # 省略 sub query_parameters :Local { my ( $self, $c ) = @_; # (1)titleパラメータを取得 $c->stash->{title} = $c->req->parameters->{title}; # (2)catパラメータを取得 my $cats = $c->req->parameters->{cat}; if (ref($cats) eq 'ARRAY') { $c->stash->{category} = join(', ', @{$cats}); } else { $c->stash->{category} = $cats; } # (3)テンプレートを指定 $c->stash->{template} = 'query.tt'; }
(1)titleパラメータを取得
Catalyst::Request
のparameters
メソッドを使用して、title
パラメータの値を取得し、Stashに登録します。
(2)catパラメータを取得
Catalyst::Request
のparameters
メソッドを使用して、cat
パラメータの値を取得します。その後、ref
関数により参照先が配列なのかスカラ値なのかを判定し、配列の場合にはjoin
関数でカンマ区切りの文字列としてStashに登録します。スカラ値の場合にはそのままStashに登録します。
(3)テンプレートを指定
パラメータを表示するためのテンプレートファイルを指定します。次のURLをWebブラウザで表示させ、パラメータを入力して送信してみましょう。
http://<ホスト名またはIPアドレス><:Port>/select/parameters
title
やcategory
の値を入力して[送信]ボタンでquery_parameters
アクションを実行します。
まとめ
本記事では、URLパスの一部を引数として扱う方法、URLパスのマッチ基準、そしてリクエストパラメータの扱いについて説明しました。
次回は、複数のアクションを内部で呼び出すためのフロー制御などについて説明していく予定です。