Подчиненная это нечто иное, чем дисплей группы. A subform - пример Zend_Form_SubForm
, вложенный в экземпляр Zend_Form
. Вы можете использовать это, чтобы вставить одну форму в другую. Например, у вас может быть форма профиля пользователя и форма регистрации. В регистрационной форме вы можете ввести значения профиля, а также некоторые другие данные. Таким образом, вы можете использовать эту форму профиля в качестве подформы, встроенной в регистрационную форму. Субформа в основном используется для DRY (не повторяйте себя) принципов или для создания многостраничной формы.
A display group - это просто визуальное представление некоторых элементов формы, сгруппированных вместе. В синтаксисе 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;
}
Можете ли вы предоставить исходный код? –
Я отправил немного кода –