所以我的問題的複雜性自帶知道多頁表格的哪一頁。使用數組和上面提到的addElements()幫助。
簡單的答案
回答我的問題是後形式「建」可以這麼說,但這樣我就可以添加到使用addElements形式之前被渲染可能被操縱的陣列( )。
長的答案
爲了讓整個畫面,想象每個你打一個或下一個按鈕時,您是通過子窗體的數組遍歷。在這種情況下,需要一個函數來處理按鈕渲染。我結束了使用的情況下statment,儘管它不是世界(在父類Form_MultiPage不能重複使用)最好的實現,但它的工作:
在我的我的mulipage窗體類的extention我
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;
}
oooooo ...閃亮。我可以看到哪裏可以抗拒選擇。但是這也需要對我做的方式進行徹底的重新設計,儘管你的想法很簡單,簡單而直接。 –