BEARで始めるWebアプリケーション開発 その9「フォーム関連機能を学んでみる」

今回はBEARでのフォーム関連の機能を学習します。

…とは言ってもBEARの場合、フォーム関連はPEAR::QuickFormのラッパー的な感じなので、フォームの構築方法自体はQuickFormの方を学ぶ必要がありそうです。なので、QuickFormの細かい使い方はひとまず置いておいて、今回はBEARでのフォームの使い方を学んでいく事にしたいと思います。

フォーム構築の方法

基本的な使い方は本家Wikiデモページを見ると非常によく分かるので、そちらを参照しながらフォーム構築方法を見ていきましょう。

フォームは、一つのまとまった単位(formタグで括られる範囲)毎にクラスファイルを作成して、その中でそのフォームに関する設定・処理を全て書いていくというスタイルが推奨されるようです。

という事で、よくある"入力→確認→完了"という画面遷移の場合のフォームクラスのサンプルを見ていきます。

http://code.google.com/p/bear-demo/source/browse/trunk/App/Form/Preview.php

基本的な流れとしては、フォームの状況(初期状態/確認画面/入力修正)に応じたonInjectメソッドを用意しておいて、そこで各状況毎の設定を行って、実際のフォーム部品の内容は、buildメソッドで定義する感じですね。

バリデーションルールもこのクラスの中で定義するので、このフォームに関する設定の全てが一つのクラスファイルに集まっていて、非常に見通しが良くて素晴らしいですね。

続いて、このフォームを利用するページファイルの方も見てみます。

http://code.google.com/p/bear-demo/source/browse/trunk/htdocs/form/preview/index.php

各メソッドの処理は、

onInjectメソッド
フォームの状況切り替え
onInitメソッド
DI経由でフォームクラスのbuildメソッド呼び出し
onActionメソッド
実際にsubmitボタンが押された場合の処理

という感じですね。

BEARは処理の役割分担が明確なので、一つのメソッドにダラダラ書いていく感じにならなくて、スッキリ書けて良いですね。

これだけで、Smartyテンプレート内で"{$form}"とだけ書けば、入力画面・確認画面の区別無く、必要な情報が全てレンダリングされた状態でフォームを表示する事ができます。

セキュリティに関しても、CSRFの防止や二重投稿の防止も自動的に考慮されるようになるので、難しい事を何も考えなくてもフォームでの値入力UIが作成できちゃいますね。

フォーム関連で、特に"入力→確認→完了"の画面遷移を伴う処理はとかく面倒な事が多いですが、BEARでは非常に簡単にフォーム処理ができる事が分かりました。

とは言え"簡単"という事は、QuickFormが自動的に処理している部分が多い訳で、QuickFormのデフォルトに乗っかる事ができる部分が大きければ非常に便利に使えますが、カスタマイズが必要な部分が多かったり、極めて単純なフォームの場合は、むしろフォームは自前で用意するようにした方がよいのかもしれないですね。

とりあえず、今のところQuickFormを使った方がよい程のフォームは扱わないので、今回はBEARでのフォームの扱い方をざっくり学んだ…というところまでにしておこうと思います。

次回は?

次回はアノテーションアスペクト指向の辺りを学習しようと思います。