フォームの入力値をチェックする
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のプラグインには次のようなものがあります。
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プラグインをインストールしましょう。
# perl -MCPAN -e 'install Catalyst::Plugin::FormValidator::Simple'
さまざまなデータ型をチェックするため、多くのモジュールがインストールされます。
今回は、日本語の文字列や郵便番号をチェックするため、FormValidator::Simple::Plugin::Japaneseも合わせてインストールします。
# perl -MCPAN -e 'install FormValidator::Simple::Plugin::Japanese'
Catalyst::Plugin::FormValidator::Simpleプラグインの設定は、Catalystの習わしに従ってアプリケーションモジュールファイルに登録します。またFormValidator::Simple::Plugin::Japaneseの登録や設定、そしてエラーメッセージファイルの登録はconfigメソッドで行います。
設定箇所は次のようになります。
# 省略 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で設定可能な項目には次のようなものがあります。
設定名 | 説明 |
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」を設定しています。