をシャッフル。配列と上記のaddElements()を使うと助けになりました。
単純な答え
は私の問題への答えは(私はaddElementsを使用してフォームに追加することができるように、フォームは、いわば「建て」された後に操作することができますが、それがレンダリングされる前に配列しました)。
ロング回答
全体像を取得するには、次または前のボタンを押すたびに、あなたがサブフォームの配列を横断している想像してみてください。この場合、ボタンレンダリングを処理する関数が必要になります。それは世界で最高の実装ではないのですけれども、私は(親クラスForm_MultiPageで再利用可能ではない)、ケースなステートメントを使用して終了、それが働いた:
私mulipageフォームクラスの私の拡張子に私は
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 ...とフォームの「ページ」をレンダリングするときに呼び出され。私はそれが挑戦できる選択肢がどこにあるのか分かりました。しかし、あなたのアイデアはシンプルで、簡単で、簡単ですが、それはまた私がそれをやっている方法の完全な再設計を必要とするでしょう。 –