Подформа - это нечто иное, чем группа отображения. подчиненная форма - это экземпляр Zend_Form_SubForm
, вложенный в экземпляр Zend_Form
. Вы можете использовать это для встраивания одной формы в другую. Например, у вас может быть форма профиля пользователя и форма регистрации. В форме регистрации вы можете ввести значения профиля, а также некоторые другие детали. Таким образом, вы можете использовать эту форму профиля как подчиненную форму, встроенную в форму регистрации. Подформа в основном используется для принципов СУХОЙ (не повторяйся) или для создания многостраничной формы.
A группа отображения - это просто визуальное представление некоторых элементов формы, сгруппированных вместе. В синтаксисе HTML это называется fieldset
. Основная цель - создать группы элементов, которые принадлежат друг другу. Например, в корзине покупок может быть группа адресов счетов-фактур и группа адресов доставки. Такая группа отображения в основном используется для семантики и визуального представления.
Одно из самых больших отличий заключается в том, что для групп отображения форма осведомлена об этих элементах формы, так как в случае с подчиненными формами форма не имеет сведений об элементах подчиненных форм. При этом я заметил, что вы хотите создать одну форму, которая содержит две группы отображения: одну при входе в систему, другую при создании (или регистрации) пользователя. С учетом приведенного выше вы не можете использовать для этого группы отображения. Один из вариантов - использовать два экземпляра формы:
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');
}
}
В обоих случаях вы можете просто создать одну из этих форм в вашем контроллере:
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;
}