SHOEISHA iD

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

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

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

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

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


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

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

 例として、2つのパラメータを取得するアクションを紹介します。

 このサンプルではCatalyst::Requestの2種類のメソッドを使用してパラメータを取得するために、「query_param」アクションと「query_parameters」アクションの2つを定義し、それぞれのアクションを呼び出すためのフォームを表示する「select」アクションを定義します。それぞれのアクションについては次のような画面を表示するためのテンプレートも併せて作成します。

パラメータ取得アクションを呼び出すフォーム画面
パラメータ取得アクションを呼び出すフォーム画面
パラメータ取得アクションによりパラメータの値を表示する画面
パラメータ取得アクションによりパラメータの値を表示する画面

 このサンプルでは「title」と「cat」(category)という2つのパラメータを使用します。特に「cat」パラメータは0個から5個までの複数個が設定されます。またパラメータに日本語の文字列を使用した場合にも正しく受け渡しできていることも確認してください。

パラメータ取得アクションを呼び出すフォーム

 まずは、パラメータ取得アクションを呼び出すためのフォーム表示アクションを定義します。このサンプルのように一部の値が異なるだけの場合には、1つのアクションでリクエストパラメータの値によって処理を切り替える場合が多いと思いますが、最近のWebアプリケーションではリクエストパラメータとして情報を受け取るのではなく、URLのパス要素に情報を含めるREST的なURLを選択する事例が増えています。

 本記事の前半でURLパスから引数を受け取る方法を紹介しましたので、selectアクションではURLパスで指定される「select」の後の部分を用いて、query_param/query_parametersアクションを切り替えて呼び出すことが出来るようにします。

 selectアクションは次のようにRoot.pmに定義します。

[リスト18]selectアクションの定義
package ParamSample::Controller::Root;

# 省略

# (1)1つだけパス要素を受け取る
sub select :Local :Args(1) {
  # (2)パラメータの種類を引数として受け取る
  my ( $self, $c, $param_type ) = @_;
  # (3)パラメータの種類チェック
  ($param_type eq 'param' || $param_type eq 'parameters')
      || $c->error('Invalid Request');
  # (4)パラメータの種類を設定
  $c->stash->{an_action} = ($param_type eq 'param') ? 'query_param' : 'query_parameters';
  # (5)テンプレートを指定
  $c->stash->{template} = 'select.tt';
}
(1)1つだけパス要素を受け取る

 「select」に続くパス要素を1つだけ受け取るように「:Args(1)」アトリビュートを指定します。

 この指定により、「select/param/abc」のようにパラメータ種類の後に何らかのパス要素が指定された場合にはselectアクションにはマッチしません。

(2)パラメータの種類を引数として受け取る

 「http://<ホスト名またはIPアドレス><:Port>/select/パラメータ種類」というURLが呼び出された場合に、「パラメータ種類」の文字列を引数$param_typeとして受け取ります。

(3)パラメータの種類チェック

 $param_typeの値が「param」か「parameters」以外の場合には、処理を中断し、エラーページを表示します。

(4)パラメータの種類を設定

 テンプレートでは、パラメータ種類によってPOSTするURLを切り替えますので、Stashにan_actionとして、実行するアクションを設定します。

(5)テンプレートを指定

 パラメータを取得するアクションを呼び出すためのフォームを定義したテンプレートファイルを指定します。テンプレートファイルは「ParamSample/root/select.tt」として作成します。

 select.ttテンプレートは次のようになります。

[リスト19]select.tt
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>リクエストパラメータ</title>
</head>
<body>
<h1>/[% an_action %]の実行</h1>
<form method="POST" action="[% c.uri_for(an_action) %]">
  title : <input type="text" name="title"/><br/>
  <p>category</p>
  <input type="checkbox" name="cat" value="Perl">Perl</input><br/>
  <input type="checkbox" name="cat" value="パール">パール</input><br/>
  <input type="checkbox" name="cat" value="CGI">CGI</input><br/>
  <input type="checkbox" name="cat" value="Catalyst">Catalyst</input><br/>
  <input type="checkbox" name="cat" value="カタリスト">カタリスト</input><br/>
  <input type="submit" name="submit" value="送信"/><br/>
</form>
</body>
</html>

 Catalystのuri_forメソッドは、アクションから対応するURIを返します。

 selectアクションで渡されるan_actionには「query_param」または「query_parameters」のどちらかが設定されていますので、このuri_forメソッドを使用して、フォームの送信URLに置換しています。

 また、「cat」パラメータはチェックボックスにより複数選択できるようにします。このファイルもUTF-8で保存します。

パラメータ表示テンプレート

 パラメータを表示するために「ParamSample/root/query.tt」というテンプレートファイルを作成します。

[リスト20]query.tt
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>リクエストパラメータの表示</title>
</head>
<body>
<h1>パラメータの値</h1>
<p>title=[% title %]</p>
<p>category=[% category %]</p>
</body>
</html>

 titlecategoryの値をStashから取得して埋め込んでいます。

 catパラメータは複数設定される場合がありますが、その場合にはカンマ区切りの文字列として連結した値をcategoryに指定するようにします。

次のページ
まとめ

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング