フォームフレームワークを使おう!

2008年5月26日(月)
森川 穣

フォーム要素の登録方法

 スクリプトを見るとわかるとおり、アクション・テンプレート内ではフォームの設定はされません。というのも、フォームの設定はすべてフォームクラスで行うからです。デフォルトのフォームクラスを拡張して要素を登録する方法については、自動生成されたlib/form/base/BasePostForm.class.phpが参考になります。

 BasePostFormクラスを継承したPostFormを拡張することで、フォーム要素やバリデーションを追加することができます。まず、フォーム要素の追加についてですが、ウィジェット(Widget)と呼ばれウィジェットオブジェクトをフォームクラスに追加します。setWidgetsメソッドの配列形式で定義されたウィジェットが登録されます。バリデーションについても同様に、バリデーションオブジェクトをフォームクラスに追加します(図2)。あとはテンプレートで$form['sample']を出力すればタグが追加されます。

 このようにして追加した独自のフォーム要素をデータベース登録時に使用する場合は、PostFormクラスのupdateObjectメソッドを拡張します。

バリデーションの方法

 現状ではsymfony 1.0のようにYAMLでバリデーションを定義できず、フォームクラス内でバリデーションの定義を行います。複数のバリデーションを実行する場合は、すべてのバリデーションがエラーが発生しないことを確認するか、ひとつでもバリデーションを通ればエラーを発生させないようにするかを選択することができるようになっています。

 複数のバリデーションを定義するには、図2のようにバリデータを定義します。

 sfValidatorAndを使用するとすべてのバリデータが実行されて、1つでもエラーがあればエラーを返します。sfValidatorOrを使用すると、順番にバリデータが実行され、1つでもエラーが発生しないものがあれば、エラーとはみなされません。

アシアル株式会社
大学4年時にアシアル株式会社にアルバイトとして入社。そこで初めてPHP言語でのプログラミングを覚え、会社に深く参画していく。大学卒業後は東京大学大学院を中退し、今に至る。アシアルでは、CTOとして、最新技術の探求/応用や、ワークショップやセミナーでの講演も行っている。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています