SHOEISHA iD

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

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

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

初めてのCatalyst入門(13)
Catalystによるフォーム操作と検証

フォームのパラメータ検証、値を自動的に設定

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

フォームの入力値をチェックする

 Webアプリケーションでデータ入力を行う場合には、一般的には次の図のような流れで処理を行います。

データ登録処理の流れ
データ登録処理の流れ
(1)データの入力およびチェック

 入力データには名前や電話番号、メールアドレス、住所などさまざまなものがありますが、データベースに誤った値を入れてしまうと、後々に不都合が発生します。

 入力時にそれぞれのデータ型に従ったチェックを行うことで、ある程度の問題を防ぐことができるようになります。

 Webアプリケーションの場合には、まず入力フォームによりデータを入力し、Submitすると遷移先のアクションで入力型に従ってチェックを行い、入力データに問題がある場合には再度入力フォームに遷移してデータの再入力を促します。

 すべてのチェックがOKの場合には次の確認処理に進みます。

(2)データの登録前確認

 データ型によるチェックが成功した場合でも、実際にデータベースに保存する前に入力データの内容を確認する段階が必要となります。例えば名前の字を間違っていた場合やメールアドレスの打ち間違いなどを修正できるきっかけを用意します。

 ここでもし入力値を修正したい場合には(1)の入力フォームに戻ります。入力値を確認して、これで大丈夫となったら次の登録処理に進みます。

(3)データの登録

 ここまでで、データを処理するうえで不都合のないデータであること、データ内容についてもユーザーが登録しても良いという確認が終わっているため、実際にデータベースに登録します。

フォーム入力値をチェックするプラグイン

 Catalystでは、このような入力値をチェック(validate)するためのプラグインとして、Catalyst::Plugin::FormValidatorが用意されています。

 このプラグインはData::FormValidatorをCatalystから簡単に呼び出せるようにするためのラッパープラグインです。

 今回はFormValidatorプラグインの中からCatalyst::Plugin::FormValidator::Simpleを紹介します。

 Catalyst::Plugin::FormValidator::Simpleプラグインでは、未設定を許可するかどうか、数値であれば最大値、最小値、文字列であれば文字数の範囲などをチェックできます。

 それ以外にも日時のフォーマットチェックや郵便番号、メールアドレス、正規表現などさまざまなチェックが可能です。

 Catalyst::Plugin::FormValidator::Simpleプラグインは、FormValidator::Simpleへのラッパープラグインとなっており、FormValidator::Simple::Plugin::*として用意されているさまざまなチェック用プラグインを使用できます。

 便利なFormValidator::Simpleのプラグインには次のようなものがあります。

主要なFormValidator::Simpleプラグイン
Plugin名(FormValidator::Simple::Pluginを省略) 説明
Math 数値評価を行う。さまざまな演算結果を評価することもできる
Japanese 日本関連の評価を行う。日本語文字列だけでなく、郵便番号や携帯電話のメールアドレスなどもチェックできる
DBIC::Schema::Unique DBIC::Schemaを使用して一意性をチェック
CDBI::Unique CDBIを使用して一意性をチェック
CreditCard クレジットカード番号をチェック
Number::Phone::JP 日本の電話番号をチェック
NetAddr::IP IPアドレスをチェック

 パラメータのチェックでエラーになった場合には、どの項目がどのような理由でエラーになったのかをユーザーに通知する必要があります。

 FormValidator::Simpleでは、それぞれのパラメータについてのエラーメッセージをアプリケーションのconfigで設定することも可能ですが、YAML形式ファイルで別途定義することもできます。

Catalyst::Plugin::FormValidator::Sampleをインストール/設定する

 それではCatalyst::Plugin::FormValidator::Sampleプラグインをインストールしましょう。

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

 さまざまなデータ型をチェックするため、多くのモジュールがインストールされます。

 今回は、日本語の文字列や郵便番号をチェックするため、FormValidator::Simple::Plugin::Japaneseも合わせてインストールします。

[リスト4]FormValidator::Simple::Plugin::Japaneseのインストール
# perl -MCPAN -e 'install FormValidator::Simple::Plugin::Japanese'

 Catalyst::Plugin::FormValidator::Simpleプラグインの設定は、Catalystの習わしに従ってアプリケーションモジュールファイルに登録します。またFormValidator::Simple::Plugin::Japaneseの登録や設定、そしてエラーメッセージファイルの登録はconfigメソッドで行います。

 設定箇所は次のようになります。

[リスト5]FormValidator::Simpleプラグインの登録(FormSample.pmの一部)
# 省略
use Catalyst qw/
  -Debug
  ConfigLoader
  Static::Simple
  FormValidator::Simple
  Unicode::Encoding
/;
# 省略
__PACKAGE__->config(
  # 省略
  # Validator::Simple関連のパラメータ登録
  'validator' => {
    plugins => ['Japanese'],
    options => {charset => 'utf8'},
    messages => 'conf/messages.yml',
    message_format => '<span style="color:#ff0000;">%s</span>',
    message_decode_from => 'utf-8',
  },
);

 configで設定可能な項目には次のようなものがあります。

FormValidatorプラグインのconfigでの設定項目
設定名 説明
plugins 使用するプラグイン(FormValidator::Simple::Pluginネームスペースに登録されている)名
options プラグインに渡すオプション
messages メッセージファイルのパス
message_format メッセージのフォーマット
message_decode_from メッセージファイルの文字キャラクタセット

 Catalyst::Plugin::FormValidator::Simpleの機能拡張はFormValidator::Simpleのプラグインがそのまま使えるようになっているため、「plugins」の項目には使用するプラグイン名を指定します。上記の例ではFormValidator::Simple::Plugin::Japaneseを使用するように設定しています。

 「options」には、各プラグインに渡すパラメータを指定できます。例えばFormValidator::Simple::Plugin::Japaneseプラグインがデフォルトで使用するキャラクタセットを支持するために、optionsでは「charset => 'utf8'」を設定しています。

 それ以外には、「messages」ではエラーメッセージを定義するためのファイルを「conf/messages.yml」に置くように設定しました。さらに「message_format」では、エラーメッセージを表示する際のフォーマットを定義しています。この設定例では「名前を入力してください!」というエラーメッセージは「<span style="color:#ff0000;">名前を入力してください!</span>」に変換されるようになります。エラーメッセージが文字化けする場合にはメッセージファイルの文字キャラクタセットが正しく設定されているか確認してください。この値は「message_decode_from」で設定することが出来ます。上記の例では「utf-8」を設定しています。

次のページ
チェック機能を実装する

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

  • 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/5717 2011/02/10 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング