SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(4) URLパスとリクエストパラメータ

リクエスト情報やパラメータ、日本語文字列などのデータの取り扱い方法


  • X ポスト
  • このエントリーをはてなブックマークに追加

リクエストパラメータの扱い

 HTTPのGETPOSTメソッドで送信されたURLのリクエストパラメータは Catalyst::Requestで処理されます。このモジュールにはパラメータを取得するメソッドが「param」と「parameters」の2種類用意されています。

paramメソッド

 paramメソッドは、CGI.pmのparamメソッドと機能的に同等となっています。モジュールによってはCGI.pmのparamメソッドを前提にしているものもありますので、このようなモジュールを使用する際には、そのままCatalyst::Requestを使用することが出来ます。

 パラメータの値を取得するには、次のように呼び出します。

[リスト12]paramメソッドの使用例
# 「foo」の値を取得
$value  = $c->request->param( 'foo' );
# 複数の「bar」の値を配列として取得
@values = $c->request->param( 'bar' );
# すべてのパラメータを配列として取得
@params = $c->request->param;

parametersメソッド

 HTTPのGETPOSTメソッドで送信されたリクエストパラメータを取得します。パラメータはハッシュの参照として保持されています。

 パラメータの値を取得するには、次のように呼び出します。

[リスト13]parametersメソッドの使用例
# 「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を使用する方法が説明されていますので、これを参考にサンプルで紹介する範囲に必要な手順を説明します。

【コラム】UTF-8以外の文字コードを使用するには

 Perlの5.8からは内部での文字列表現がUnicodeとして扱われるようになりました。このためリクエスト/レスポンスやデータベースなども含めて、すべての文字コードをUTF-8に統一するのが一般的になりつつあります。

 ただし携帯端末によってはリクエスト/レスポンスの文字コードをShift_JISに対応する必要があったり、データベースの文字コードがEUC-JPであったりとUTF-8以外の文字コードを使わざるを得ない状況があると思います。

 これらの場合には使用するプラグインなどの仕様にもよるため、ケースバイケースでの対応が必要になりますが、今後予定しているビューやモデルの回で可能な限り説明していく予定です。

Catalyst::Plugin::Unicode

 リクエストパラメータをエンコード/デコードするために、Catalyst::Plugin::Unicodeを使用します。このプラグインをインストールするには、rootユーザで次のコマンドを実行します。

[リスト14]Catalyst::Plugin::Unicodeのインストール
# perl -MCPAN -e 'install Catalyst::Plugin::Unicode'

 Catalystアプリケーションから使用するには、アプリケーションクラスでこのプラグインをLoadする必要があります。アプリケーションクラス「ParamSample/lib/ParamSample.pm」で次のように指定します。

[リスト15]Catalyst::Plugin::Unicodeを登録
package ParamSample;

# 省略

use parent qw/Catalyst/;
use Catalyst qw/-Debug
                ConfigLoader
                Static::Simple
                Unicode/; # 追加
【コラム】PPMを使用してCatalyst::Plugin::Unicodeをインストールする

 ActivePerlのPPMを使用してインストールする場合には、デフォルトで登録されているActivePerlのリポジトリサイトにはCatalyst::Plugin::Unicodeは登録されていませんので、次のリポジトリサイトを登録する必要があります。

 PPMのメニューから[Edit]-[Preferences]を選択し、「PPM Repositories」ダイアログを開きます。この[Repositories]タブでリポジトリサイトを登録するのですが、幸い候補リポジトリの中に登録されていますので、「Suggested」から「tcool :: Kenichi Ishigaki's repository」を選択し、[Add]ボタンで登録します。

 

PPMでレポジトリ追加
PPMでレポジトリ追加

 そして、通常のモジュールと同様に「Catalyst-Plugin-Unicode」をPPMでインストールします。

テンプレートのエンコーディング

 Catalyst::View::TTを使用する場合には、テンプレートのエンコーディングとしてUTF-8を指定します。次のように「ParamSample/lib/ParamSample/View/TT.pm」のconfigメソッドで、ENCODINGの値として「utf-8」を設定します。

[リスト16]Catalyst::View::TTのエンコーディング設定
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コントローラで使用する場合には、次のように指定します。

[リスト17]Rootコントローラでutf8を使用
package ParamSample::Controller::Root;

use strict;
use warnings;
use parent 'Catalyst::Controller';
use utf8; # 追加

次のページ
リクエストパラメータを扱うサンプル

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4538 2010/06/11 15:10

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング