Zend_Form によるフォームの作成Zend_Form クラスは、フォームの要素や 表示グループ、そしてサブフォームの集約を行います。 そして、その要素に対して次のような操作を行います。
Zend_Form で作成したフォームが複雑なものになることもありますが、 シンプルなフォームで使用するのがもっともよくある使用例でしょう。 手早いアプリケーション開発 (RAD) やプロトタイピングでの使用に最適です。 もっとも基本的な使用法は、単にフォームオブジェクトを作成するものです。
Zend_Config のインスタンスあるいは配列で設定を渡すことができます。 これを使用すると、オブジェクトの状態を設定したり新しい要素を作成したりできます。
Zend_Form は順次処理が可能です。 各要素や表示グループ、サブフォームごとに処理できます。 処理順は、登録した順番および各項目に設定されている順番となります。 これは、各要素のレンダリングを適切な順で行いたいときに便利です。 Zend_Form は、要素や表示グループのファクトリとして使用できると同時に デコレータで自分自身をレンダリングすることもできます。 プラグインローダーZend_Form では、 Zend_Loader_PluginLoader を使用することで 別の要素やデコレータの位置を指定できます。 それぞれにプラグインローダーを関連づけることができ、 汎用的なアクセサを使用してそれを取得したり変更したりします。 使用できるローダーの型は 'element' と 'decorator' です。さまざまなプラグインローダーメソッドが用意されています。 型の名前は大文字小文字を区別しません。 プラグインローダーで使用できるメソッドは、次のとおりです。
さらに、Zend_Form のインスタンスで作成したすべての要素や表示グループ用のプレフィックスパスを設定するには 次のメソッドを使用します。
独自の要素やデコレータを使用すると、 複数フォーム間で機能を共有したり 独自の機能をカプセル化したりできるようになります。 独自の要素を既存の標準クラスに置き換えて使用する例については、 要素のドキュメントの中の 独自のラベルを作る例 を参照ください。 要素Zend_Form では、フォームに要素を追加したり フォームから要素を削除したりするためのアクセサを提供しています。 これらは要素オブジェクトのインスタンスを受け取ることもできますし、 ファクトリとして要素オブジェクトのインスタンスを作成させることもできます。 要素を追加するもっとも基本的なメソッドが addElement() です。 このメソッドは、 Zend_Form_Element 型 (あるいは Zend_Form_Element を継承したクラス) のオブジェクト あるいは新しい要素を作成するための引数 (要素の型や名前、設定オプション) を受け取ります。 例を示します。
要素をフォームに追加したら、名前を指定してそれを取得できます。 取得するには、 getElement() メソッドを使用するか オブジェクトのプロパティとして要素にアクセスします。 property:
時には、フォームにアタッチせずに要素を作成したいこともあるでしょう (フォームに登録されているさまざまなプラグインパスを使いたいけれど、 そのオブジェクトは後でサブフォームにアタッチしたい場合など)。 そんな場合は createElement() メソッドを使用します。
値の設定と取得フォームの検証をすませたら、通常は値を取得することになるでしょう。 その値を用いてデータベースの更新なりウェブサービスの操作なりといった作業を行います。 すべての要素の値を取得するには getValues() を使用します。 getValue($name) を使用すると、 要素名を指定して特定の要素の値を取得できます。
レンダリング前に、フォームに特定の値を設定したいこともあるでしょう。 これを行うには setDefaults() メソッドあるいは populate() メソッドを使用します。 逆に、値を設定したり検証したりした後でフォームをクリアしたいこともあるでしょう。 これを行うには reset() メソッドを使用します。 グローバルな操作時には、すべての要素に対して何らかの操作を行いたくなることもあります。 ありがちな例としては、すべての要素に対してプラグインのプレフィックスを設定したり デコレータを設定したり、フィルタを設定したりといったものがあります。 以下に例を示します。 Example #1 すべての要素に対するプレフィックスパスの設定 型を指定してすべての要素に対するプレフィックスパスを設定したり、 グローバルプレフィックスを使用したりする例です。
Example #2 すべての要素に対するデコレータの設定 すべての要素に対するデコレータを設定できます。 setElementDecorators() に setDecorators() と同じようなデコレータの配列を渡すと、 各要素にそれまで設定されていたすべてのデコレータを上書きします。 この例では、単純に ViewHelper デコレータと Label デコレータを設定します。
Example #3 いくつかの要素に対するデコレータの設定 設定したい要素、あるいは設定したくない要素を指定することで、 一部の要素にだけデコレータを設定することもできます。 setElementDecorators() の 2 番目の引数に要素名の配列を指定します。 デフォルトでは、ここで指定した要素にのみデコレータが設定されます。 3 番目の引数を渡すこともできます。 これは、設定「したい」要素なのか設定「したくない」 要素なのかを表すフラグとなります。 FALSE を渡すと、指定した 以外の すべての要素にデコレータを設定します。 このメソッドの標準的な使用法と同様、 各要素にそれまで設定されていたすべてのデコレータを上書きします。 次の例は、 ViewHelper デコレータと Label デコレータを 要素 'foo' および 'bar' に対してのみ使用するものです。
一方、この例では、ViewHelper デコレータと Label デコレータを 'foo' と 'bar' 以外の すべての要素に対して使用します。
Example #4 すべての要素に対するフィルタの設定 すべての要素に対して同じフィルタを適用したくなることもよくあります。 たとえば、すべての値を trim() するなどです。
要素を操作するためのメソッド次のメソッドを使用して、要素を操作します。
表示グループ表示グループを使用すると、複数の要素を仮想的にグループ化して 表示させることができます。 フォーム内の各要素に対しては名前を指定してアクセスできますが、 フォームの要素を順次処理したりレンダリングしたりするときは 表示グループは一括して扱われます。 表示グループのもっとも一般的な使用例は、 フィールドセット内の要素をグループ化することです。 表示グループの基底クラスは Zend_Form_DisplayGroup です。 このクラスのインスタンスを直接作成することもできますが、 一般的には Zend_Form の addDisplayGroup() メソッドでインスタンスを作成することになります。 このメソッドの最初の引数には要素名の配列を渡し、 表示グループの名前を 2 番目の引数で指定します。 オプションの 3 番目の引数で、設定の配列や Zend_Config オブジェクトを渡すこともできます。 'username' と 'password' という要素がすでにフォームに登録済みである場合に、 次のコードを使用するとそれらを表示グループ 'login' にまとめることができます。
表示グループにアクセスするには、 getDisplayGroup() メソッドを使用するか あるいは表示グループ名を指定します。
|
|