ユーザがフォームを送信すると、サブフォームに属する入力フィールドも含めて、全ての階層の入力フィールドに入れられたデータが送信されます。自動的に入力データを対応するモデル属性に割り当ててデータ検証をすることが可能な便利なメソッドを提供します。以下に、ログインフォームを作成するためにフォームビルダーを利用する方法を示します。最初に、ログインアクションコードを書きます。オブジェクトを作成しています。モデルと関連付けられています。ページにリダイレクトされます。フォームが再度表示されます。ファイルを参照します。配列を返す必要があります。ペアから構成される連想配列です。それぞれはフォームの要素のリストを指定する配列をとります。次の節において、フォーム要素をどのように構成するかを詳しく説明します。ビュースクリプトを記述しますが、以下のようにたいへん簡単になります。呼び出して、フォームオブジェクトの文字列表現をその結果として返すためです。¶フォームビルダを使うことにより、ほとんどの作業はビュースクリプトコードを書くことからフォーム要素を指定することに移ります。どのように指定するかを示します。とほとんど同じであるため、説明しません。プロパティは配列をその値として受け付けます。それぞれの配列要素は単一のフォーム要素となり、それは、入力要素であっても良いし、文字列やサブフォームであっても構いません。入力要素は主にラベルと入力フィールドと入力ヒントテキストとエラー表示から構成されます。これはモデル属性に関連づけられる必要があります。インスタンスとして表現されます。配列中の以下のコードは単一の入力要素を指定します。あることを示しています。設定可能なプロパティはすべて上記のようにして構成することが出来ます。オプションを指定できます。入力要素の属性として扱われます。属性として扱われます。オプションは注意が必要です。これは入力フィールドのタイプを指定します。通常のテキスト入力フィールドが表示されることを意味します。タイプはパスワード入力フィールドが表示されることを意味します。以下の内蔵型のタイプを認識します。タイプのものの使い方について、もう少し詳しく説明したいと思います。プロパティを設定することが要求されます。これは次のようにして設定することが出来ます。いうプロンプトテキストを持ったドロップダウンリストセレクタが生成されます。メソッドから返されたものです。ウィジェットクラス名かそれのパスエイリアスを指定する事が出来ます。継承する必要があります。入力フィールドを表示する場合、指定されたウィジェットクラスインスタンスが生成され、表示されます。ウィジェットは入力要素のために指定した仕様によって構成されます。フォームの異なる部分を分離するために水平線が描かれたり、フォームの見栄えを良くするためにある部分にイメージが配置されたりします。中に指定することが出来ます。適当な場所に指定するだけです。入力の間に水平線が挿入されています。スタティックテキストはテキストの内容と配置が通常でない場合に用いるのが適切です。すべての入力要素を同じ様に飾る必要がある場合には、フォーム表示をカスタマイズするアプローチをとるべきで、それはこの章の少し後で説明します。サブフォームの指定サブフォームは長いフォームを論理的に関係する部分に分割するために使用されます。ユーザ登録フォームは、ログイン情報とプロファイル情報の二つの部分に分割されます。それぞれのサブフォームは同一のデータモデルに関係してもしなくても構いません。格納する場合は、それぞれのサブフォームは対応するデータモデルに対応づけられるでしょう。なく、もし全ての情報を単一のテーブルに格納する場合は、サブフォームはデータモデルを持ちません。サブフォームは親フォームに関係づけられたデータモデルを共有するからです。オブジェクトとして表現されます。指定する必要があります。以外のクラスを使って表現したい場合があります。継承することが出来ます。指定すると、サブフォームは自動的に親フォームと同じクラスのオブジェクトとして表現されます。オブジェクトとして表現されます。¶フォーム要素へのアクセスは配列要素へのアクセスと同様に単純です。オブジェクトを返します。要素へアクセスするには、以下のコードを用います。要素にアクセスするためには、下記のようにします。プロパティへの配列アクセスを実装しているため、上記コードはさらに以下のように単純化されます。サブフォームを説明しました。サブフォームを持つフォームのことを入れ子フォームと呼ぶことにしましょう。この章では、ユーザ登録フォームを例として、複数のデータモデルに関連付けられた入れ子フォームを作成する方法を説明します。モデルに格納されているものとします。アクションを次のように作成します。よりフォームの構成を指定しています。フォームが送信され正常に検証された後に、ユーザモデルとプロファイルモデルの保存を試みます。プロパティにアクセスすることで、ユーザモデルとプロファイルモデルを取得します。これはプロファイルモデルも同様です。プロパティも指定しています。デフォルトのフォーム表示ロジックでは、それぞれのサブフォームは、このプロパティをタイトルとして用いたフィールドセットで囲まれます。ビュースクリプトを記述します。この結果、CForm::renderを上書きしたり、部分ビューを提供したりすることで、フォーム表示のカスタマイズが可能となります。両方のアプローチ共、フォーム構成を触ることが無いため、容易に再利用が可能です。メソッドをコールする必要があります。以下のように記述します。$form->renderEnd();このビュースクリプトを使用するには、単に以下のようにコールするだけです。ビュースクリプト中で以下のようなやり方を行うことができます。最後のアプローチにおいては、同様の量のフォームコードを書く必要があるため、フォームビルダはあまり利点があるとは言えません。フォームが独立した構成ファイルを使って指定されるため、開発者がロジックに集中しやすくなるという利点があります。