パラメーターを取得する - param, every_param

パラメーターを取得するには、paramメソッド、every_paramメソッドを使用します。

# ひとつのパラメーター
my $name = $c->param('name');

# すべてのパラメーター
my $names = $c->every_param('name');

Mojoliciousでパラメーターといった場合次の三つの要素を含むことが多いので、まず次の三つのものの区別をしておきましょう。

  1. クエリ文字列に含まれるデータ
  2. POSTで送信されたHTTPボディに含まれるデータ
  3. 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;
}

関連情報