Итак, сложность моей проблемы заключается в том, чтобы знать, какая страница многостраничной формы. Помогло использование массива и вышеупомянутых addElements ().
Простой ответ
Ответом на мою проблему был массив, которым можно было манипулировать после того, как форма была, так сказать, «построена», но до того, как она была визуализирована, чтобы я мог добавить ее в форму с помощью addElements ().
Длинный ответ
Чтобы получить полную картину, представьте, что каждый раз, когда вы нажимаете следующую или предыдущую кнопку, вы просматриваете массив субформ. В этом случае понадобится функция для обработки рендеринга кнопок. Я закончил тем, что использовал регистрацию случая, хотя это не лучшая реализация в мире (не может быть повторно использована в родительском классе Form_MultiPage), но это сработало:
в моем расширении моего многостраничного класса у меня есть
public function setSubmitControls()
{
$previous = new Zend_Form_Element_Submit('previous',array(
'label'=>'previous',
'required'=>false,
'ignore'=>false,
'order'=>9000
));
$cancel = new Zend_Form_Element_Submit('cancel',array(
'label'=>'Cancel',
'required'=>false,
'ignore'=>false,
'order'=>9003
));
$next = new Zend_Form_Element_Submit('next',array(
'label'=>'Next',
'required'=>false,
'ignore'=>false,
'order'=>9002
));
$finished = new Zend_Form_Element_submit('finish',array(
'label'=>'Finish',
'required'=>false,
'ignore'=>false,
'order'=>9004
));
$submitControls = array();
echo var_dump($this->getCurrentSubForm()->getName());
switch($this->getCurrentSubForm()->getName())
{
case 'billInfo':
$submitControls = array(
$next,
$cancel
);
break;
case 'payerInfo':
$submitControls = array(
$previous,
$next,
$cancel
);
break;
//So on for other subforms
}
$this->setSubmitButtonGroup($submitControls);
}
В моем родительском классе Form_Multipage у меня есть
public function setSubmitButtonGroup(array $elements)
{
$this->_submitButton = $elements;
}
И
public function addSubmitButtonGroupToSubForm(Zend_Form_SubForm $subForm)
{
$subForm->addElements($this->_submitButton);
return $subForm;
}
Который вызывается при рендеринге "страницы" формы с помощью этой функции
public function prepareSubForm($spec)
{
if (is_string($spec)) {
$subForm = $this->{$spec};
} elseif ($spec instanceof Zend_Form_SubForm) {
$subForm = $spec;
} else {
throw new Exception('Invalid argument passed to ' .
__FUNCTION__ . '()');
}
$subform = $this->setSubFormDecorators($subForm);
$subform = $this->addSubmitButtonGroupToSubForm($subForm);
$subform = $this->addSubFormActions($subForm);
$subform->setMethod($this->getMethod());
return $subForm;
}