リクエストパラメータの扱い
HTTPのGET
やPOST
メソッドで送信されたURLのリクエストパラメータは Catalyst::Requestで処理されます。このモジュールにはパラメータを取得するメソッドが「param
」と「parameters
」の2種類用意されています。
paramメソッド
param
メソッドは、CGI.pmのparam
メソッドと機能的に同等となっています。モジュールによってはCGI.pmのparam
メソッドを前提にしているものもありますので、このようなモジュールを使用する際には、そのままCatalyst::Request
を使用することが出来ます。
パラメータの値を取得するには、次のように呼び出します。
# 「foo」の値を取得 $value = $c->request->param( 'foo' ); # 複数の「bar」の値を配列として取得 @values = $c->request->param( 'bar' ); # すべてのパラメータを配列として取得 @params = $c->request->param;
parametersメソッド
HTTPのGET
やPOST
メソッドで送信されたリクエストパラメータを取得します。パラメータはハッシュの参照として保持されています。
パラメータの値を取得するには、次のように呼び出します。
# 「foo」の値を取得 $value = print $c->request->parameters->{foo}; # 複数の「bar」配列参照から最初の値を取得 $values0 $c->request->parameters->{bar}->[0];
parameters
メソッドには、ショートカットとしてparams
メソッドも用意されています。
パラメータにUTF-8を使用する方法
パラメータにUTF-8を使用するにはいくつかの手順が必要です。
Using Unicode in Catalyst Applicationsでは、CatalystアプリケーションでUnicodeを使用する方法が説明されていますので、これを参考にサンプルで紹介する範囲に必要な手順を説明します。
Perlの5.8からは内部での文字列表現がUnicodeとして扱われるようになりました。このためリクエスト/レスポンスやデータベースなども含めて、すべての文字コードをUTF-8に統一するのが一般的になりつつあります。
ただし携帯端末によってはリクエスト/レスポンスの文字コードをShift_JISに対応する必要があったり、データベースの文字コードがEUC-JPであったりとUTF-8以外の文字コードを使わざるを得ない状況があると思います。
これらの場合には使用するプラグインなどの仕様にもよるため、ケースバイケースでの対応が必要になりますが、今後予定しているビューやモデルの回で可能な限り説明していく予定です。
Catalyst::Plugin::Unicode
リクエストパラメータをエンコード/デコードするために、Catalyst::Plugin::Unicodeを使用します。このプラグインをインストールするには、root
ユーザで次のコマンドを実行します。
# perl -MCPAN -e 'install Catalyst::Plugin::Unicode'
Catalystアプリケーションから使用するには、アプリケーションクラスでこのプラグインをLoadする必要があります。アプリケーションクラス「ParamSample/lib/ParamSample.pm」で次のように指定します。
package ParamSample; # 省略 use parent qw/Catalyst/; use Catalyst qw/-Debug ConfigLoader Static::Simple Unicode/; # 追加
ActivePerlのPPMを使用してインストールする場合には、デフォルトで登録されているActivePerlのリポジトリサイトにはCatalyst::Plugin::Unicode
は登録されていませんので、次のリポジトリサイトを登録する必要があります。
PPMのメニューから[Edit]-[Preferences]を選択し、「PPM Repositories」ダイアログを開きます。この[Repositories]タブでリポジトリサイトを登録するのですが、幸い候補リポジトリの中に登録されていますので、「Suggested」から「tcool :: Kenichi Ishigaki's repository」を選択し、[Add]ボタンで登録します。
そして、通常のモジュールと同様に「Catalyst-Plugin-Unicode」をPPMでインストールします。
テンプレートのエンコーディング
Catalyst::View::TT
を使用する場合には、テンプレートのエンコーディングとしてUTF-8を指定します。次のように「ParamSample/lib/ParamSample/View/TT.pm」のconfig
メソッドで、ENCODINGの値として「utf-8」を設定します。
package ParamSample::View::TT; use strict; use base 'Catalyst::View::TT'; __PACKAGE__->config( TEMPLATE_EXTENSION => '.tt', ENCODING => 'utf-8', # 追加 );
コントローラでUTF-8を使用可能にする
Perlの5.8からは文字列の内部表現がUnicodeとして扱われるようになりましたが、パラメータから受け取ったUTF-8形式の文字列を操作する場合には、そのコントローラファイルをUTF-8で保存し、目印として「use utf8
」プラグマを記述する必要があります。このプラグマを記述することで、文字列リテラルに対してUTF-8である印(UTF8フラグ)を付け、 Perlがバイト列ではなくUnicode文字列として扱えるようになります。
例えばRoot
コントローラで使用する場合には、次のように指定します。
package ParamSample::Controller::Root; use strict; use warnings; use parent 'Catalyst::Controller'; use utf8; # 追加