Есть ли способ создать различные суб / формы, используя Zend_Form и объединить их все в 1 форму? - PullRequest
0 голосов
/ 16 декабря 2009

Я пытаюсь создать 1 базовую форму в Zend, которая является частью многих других форм. Например: следующие 3 элемента могут быть вложенной формой или мини-формой, которая является частью более крупной формы: -Название -Возраст -Address

Я просто хочу повторно использовать одну и ту же форму в разных местах - иногда добавляя такие элементы, как «адрес доставки» и т. Д. Я застреваю в точке отправки данных - когда я использую несколько форм, у меня не может быть несколько кнопок отправки - только одна. Очевидно, что все данные не собираются - только данные формы, которые содержат подформу.

Есть мысли здесь? Я использовал Zend_Form в прошлом - но никогда так не было.

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Вы должны создать один объект Zend_Form. Если вы хотите добавить свои Name, Age и Address к форме и сделать так, чтобы они выглядели normal , сделайте следующее:

$display_form = new DisplayForm();
$naa_form = new NameAgeAddressForm();
$display_form->addElements( $naa_form->getElements() );

Если вы хотите, чтобы они выглядели как подформа (то есть, своего рода сгруппированные в подраздел), сделайте следующее:

$display_form = new DisplayForm();
$display_form->addSubForm( new NameAgeAddressForm() );
0 голосов
/ 17 декабря 2009

Настройте свою повторно используемую форму имени / возраста / адреса следующим образом (скорее всего, в методе init () расширения, чтобы вы не увидели большую часть этого кода в своих действиях.)

$littleForm = new Zend_Form();
$littleForm->addElement(new Zend_Form_Element_Text('name'));
$littleForm->addElement(new Zend_Form_Element_Text('age'));
$littleForm->addElement(new Zend_Form_Element_Text('address'));
$littleForm->addElement(new Zend_Form_Element_Submit('submit'));

Поскольку вам не нужны никакие другие декораторы для формы NAA, вы устанавливаете FormElements в качестве единственного декоратора и удаляете кнопку отправки из формы NAA

$littleForm->setDecorators(array('FormElements'));
$littleForm->removeElement('submit');

Настройте отображение / основную форму следующим образом и установите порядок формы NAA, когда вы добавляете ее в качестве подформы, чтобы она отображалась над элементами основной формы.

$bigForm = new Zend_Form();
$bigForm->addElement(new Zend_Form_Element_Text('shippingAddress'));
$bigForm->addElement(new Zend_Form_Element_Submit('submit'));
$bigForm->addSubForm($littleForm, 'littleForm', 1);

$this->view->form = $bigForm;

Показать форму в скрипте вида

echo $this->form;

Вот как вы это делаете, используя декораторы. Лично я изменяю и отображаю свои формы с помощью частичного сценария и использую только декораторы для визуализации элементов ввода. Вероятно, вы бы тоже хотели этикетки и прочее ...

...