パラメーターを取得する - param, every_param
パラメーターを取得するには、paramメソッド、every_paramメソッドを使用します。
# ひとつのパラメーター my $name = $c->param('name'); # すべてのパラメーター my $names = $c->every_param('name');
Mojoliciousでパラメーターといった場合次の三つの要素を含むことが多いので、まず次の三つのものの区別をしておきましょう。
- クエリ文字列に含まれるデータ
- POSTで送信されたHTTPボディに含まれるデータ
- URLの中でキャプチャされたデータ
(1)クエリ文字列に含まれるデータ
クエリ文字列とはURLの?以降に設定されるデータのことです。
http://somehost.com/search?name=Ken&age=19
それぞれのパラメーター「パラメータ名:値」は「&」で結ばれた形になっています。クエリ文字列によるパラメータは、何かを検索するときによく利用されいます。
(2)POSTで送信されたHTTPボディに含まれるデータ
これはフォームの送信などでHTTPボディに含まれるデータです。
URLの中でキャプチャされたデータ
MojoliciousではURLの中の一部分をパラメータとしてキャプチャすることができます。
get '/entry/:id' => sub { ... };
この値もパラメータとして扱われます。
パラメーターの値の取得
パラメーターの値を取得するにはMojolicious::Controllerのparamメソッドを使用します。これは上記の(1),(2),(3)すべてを含みます。
my $age = $c->param('age');
複数の値の取得
チェックボックスなどで複数選択された値を取得するにはevery_paramメソッドを呼び出します。
my $contries = $c->every_param('country');
注意:リストコンテキストでのparam($name)は、セキュリティ上の問題のために、Mojolicious 6で機能が削除されました。every_paramを使うようにしてください。
すべてのパラメーターの名前と値を取得
パラメーター名をすべて取得するには「$c->req->params->to_hash」を使います。
my $params = $c->req->params->to_hash
注意:リストコンテキストにおける$c->paramは、セキュリティ上の理由で、Mojolicious 6から廃止されています。すべての名前を取得するには、上記で名前と値を取得した後に「keys @$params」にキーを取得してください。
以下はMojolicious::Liteにおけるサンプルです。
# Mojolicious::Lite use Mojolicious::Lite; use utf8; get '/entry/:id' => sub { my $self = shift; my $age = $self->param('age'); my @countries = $self->param('country'); my @names = $self->param; };
以下はMojoliciousにおけるサンプルです。
package MyApp::Diary; use Mojo::Base 'Mojolicious::Controller'; sub entry { my $self = shift; my $age = $self->param('age'); my @countries = $self->param('country'); my @names = $self->param; }