サブフォームは、表示グループとは別のものです。サブフォームは、Zend_Form_SubForm
インスタンスにネストされたZend_Form
インスタンスです。これを使用して、あるフォームを別のフォームに埋め込むことができます。例として、ユーザー プロファイル フォームと登録フォームがあるとします。登録フォームでは、プロファイル値やその他の詳細を入力できます。したがって、このプロファイル フォームを登録フォーム内に埋め込まれたサブフォームとして使用できます。サブフォームは、主に DRY (同じことを繰り返さないでください) の原則、または複数ページのフォームを作成するために使用されます。
表示グループは、グループ化されたいくつかのフォーム要素を視覚的に表現したものです。HTML 構文では、これは a と呼ばれますfieldset
。主な目的は、互いに属する要素のグループを作成することです。たとえば、ショッピング カートには、請求先住所グループと配送先住所グループがあるとします。このような表示グループは、主にセマンティクスと視覚的表現に使用されます。
最大の違いの 1 つは、サブフォームの場合、フォームはサブフォームの要素を認識しないのと同様に、表示グループの場合、フォームはそれらのフォーム要素を認識することです。これは、2 つの表示グループを含む 1 つのフォームを作成する必要があることに気付きました。1 つはログイン時、もう 1 つはユーザーの作成 (または登録) 時です。上から与えられたものでは、これに表示グループを使用することはできません。1 つのオプションは、2 つのフォーム インスタンスを使用することです。
class LoginForm extends Zend_Form
{
public function init ()
{
$this->addElement('text', 'user');
$this->addElement('password', 'pwd');
$this->addElement('submit', 'submit');
}
}
class RegisterForm extends Zend_Form
{
public function init ()
{
$this->addElement('text', 'user');
$this->addElement('password', 'pwd');
$this->addElement('text', 'name');
$this->addElement('submit', 'submit');
}
}
フィールドを再利用したい場合、user
サブpwd
フォームを使用したい場合:
class BaseForm extends Zend_Form_SubForm
{
public function init ()
{
$this->addElement('text', 'user');
$this->addElement('password', 'pwd');
}
}
class LoginForm extends Zend_Form
{
public function init ()
{
$subform = new BaseForm;
$this->addSubform($subform, 'base');
$this->addElement('submit', 'submit');
}
}
class RegisterForm extends Zend_Form
{
public function init ()
{
$subform = new BaseForm;
$this->addSubform($subform, 'base');
$this->addElement('text', 'name');
$this->addElement('submit', 'submit');
}
}
どちらの場合も、コントローラーでこれらのフォームの 1 つをインスタンス化するだけです。
public function loginAction ()
{
$form = new LoginForm();
// More code here
$this->view->form = $form;
}
public function registerAction ()
{
$form = new RegisterForm();
// More code here
$this->view->form = $form;
}