パラメーターの受け取り方 | Mojolicious入門
では基本のアプリケーションに機能を追加していきましょう。今回はMojoliciousにおけるパラメーターの受け取り方を解説したいと思います。ここで、パラメーターとは、ユーザーから送信されるデータのことだと考えてください。パラメーターの受け取り方には、三つの方法があります。
- URLの一部
- クエリ文字列
- POSTデータ
今回はこのうち「URLの一部」として受け取る方法と、「クエリ文字列」として受け取る方法の二つを解説したいと思いま。POSTデータとしてデータを送信する方法は、フォームの利用を解説するときに、改めて解説したいと思います。今のところは、みっつの方法があることを頭に入れておいてください。
URLの一部としてパラメーターを受け取る
最初に、URLの一部としてパラメーターを受け取る方法を解説します。たとえば次のようなURLを考えてみてください。
/date/20131016 /date/20140203
これは、URLの一部に日付が含まれています。このようなURLでアクセスしてきたときに、日付の値の部分を取得する方法を見てみましょう。コードを書いてみます。
use Mojolicious::Lite; # ルーティングのパターンの指定 get '/date/:date' => sub { my $self = shift; # パラメーターの受け取り my $date = $self->param('date'); $self->render(text => "Data: $date"); }; app->start;
このアプリケーションを実行して「/date/20131016」のようにアクセスすると、日付の値が表示されると思います。
ルーティングのパターンの指定
パラメーターを受け取るためには、ルーティングのパターンを定義する必要があります。
# ルーティングのパターンの指定 get '/date/:date' => sub { ... };
「:date」という部分に注目してください。URLの一部をパラメーターにしたい場合は、その部分を「:名前」と書きます。このように記述するとparamメソッドを使って、その値をパラメーターとして受け取ることができます。
# パラメーターの受け取り my $date = $self->param('date');
paramメソッドの注意点
paramメソッドを使うときは、注意がひとつ必要です。それはparamメソッドは、スカラコンテキストとリストコンテキストで、異なる結果を返却するからです。スカラコンテキストでは、ひとつのパラメーターの値が返却されます。パラメーターに複数の値がある場合は、最初の値が返却されます。パラメーターが複数になるのは、フォームのチェックボックスなどで、複数の値が選択されている場合などです。
一方リストコンテキストで受け取ると、パラメーターの値が複数あった場合には、複数の値を取得します。
# スカラコンテキスト my $value = $self->param('foo'); # リストコンテキスト my @values = $self->param('foo');
このような理由で、paramメソッドを直接呼び出して値を利用しようとすると、思わぬ結果になってしまうことがあります。ミスをあらかじめ防ぐには、変数に代入してから利用するのが安心です。
クエリ文字列としてパラメーターを受け取る
次はクエリ文字列としてパラメーターを受け取る方法を解説します。クエリ文字列とは、URLの後ろに続く、パラメーターを指定する部分のことです。次のURLを見てください。
/diary/?date=20131016&user=kimoto /diary/?date=20121013&user=kimoto
「?」の後ろからクエリ文字列は始まります。パラメーター名と値は「=」で区切られます。「&」を使うことで、複数のパラメーターを連結することができます。ひとつの目のURLでは、パラメーター名は二つあり「date」と「user」です。それぞれに対応する値は「20131016」と「kimoto」になっています。
ではパラメーターの値を取得してみましょう。
use Mojolicious::Lite; # ルーティングのパターンの指定 get '/diary' => sub { my $self = shift; # パラメーターの受け取り my $date = $self->param('date'); my $user = $self->param('user'); $self->render(text => "Date: $date, User: $user"); }; app->start;
このアプリケーションを起動して「/diary/?date=20131016&user=kimoto」というURLでアクセスすると「Date: 20131016, User: kimoto」と表示され、パラメーターを取得できていることがわかります。
パラメーターの取得
パラメーターの取得はparamを使います。paramメソッドは汎用的に設計されていて、パラメーターは、URLの一部としても受け取ることができますし、クエリ文字列から受け取ることもできます。
# パラメーターの受け取り my $date = $self->param('date'); my $user = $self->param('user');
このようにパラメーターを使うと、ユーザーから送信されたデータを、プログラムの中で利用することができます。