0

各要素を表示グループでラップする必要がある zend フォームがあります。次に、要素のグループを別の表示グループにラップする必要があります。Zend フォームはネストされた表示グループをサポートしていないため、代わりにサブフォームを使用します。

したがって、私の構造は次のとおりです。

Form
--- SubForm (1)
--- --- DisplayGroup (1-1)
--- --- --- Element (1)
--- --- DisplayGroup (1-2)
--- --- --- Element (2)
--- SubForm (2)
--- --- DisplayGroup (2-1)
--- --- --- Element (3)
--- --- DisplayGroup (2-2)
--- --- --- Element (4)

ただし、これにより、各サブフォームがそれに属する各要素の親として設定されるという問題が生じます。これにより要素の名前が変更され、 fename="username"は になりname="subformname[username]"ます。

表示グループの代わりにサブフォームを使用しているため、余分な機能は必要ありません。

この名前の変更を無効にするにはどうすればよいですか?

PS:カスタム関数を使用して各要素を「一括処理」しています(些細なこと-デコレータの削除、ラベルの設定など)setAttrib('name', $element -> getName())。日付ピッカー、カラーピッカーなどの ZendX フォーム要素では機能しません。

4

2 に答える 2

1

サブフォームの要素名で使用される配列表記は、 によって制御されZend_Form::$_isArrayます。ではfalseZend_Formあり、 ではtrueZend_Form_SubFormあり、 を拡張しZend_Formます。

サブフォームを呼び出すか、サブフォームが拡張されている場合はサブフォームでsetIsArray(FALSE)オーバーライドできます。Zend_Form::$_isArrayZend_Form_SubForm

于 2014-03-26T21:36:27.893 に答える
0

あなたが言ったコメントから、要素にtwitterブートストラップグリッドクラスを与えるために表示グループのみを使用していると言いました。これには表示グループを使用する必要はありません。各フォーム要素に追加の HtmlTag デコレータを追加するか、既存のものの 1 つにクラスを追加するだけです。次に、表示グループを本来の目的で使用して、次のことを実現できます。

Form
--- DisplayGroup (1)
--- --- Element (1)
--- --- Element (2)
--- DisplayGroup (2)
--- --- Element (3)
--- --- Element (4)

問題がある場合は、質問を編集して、既存のデコレータを変更している「一括処理」コードを含めてください。変更方法を提案できます。

編集:デコレータを取得して、ラベルとフォーム要素をラップするのは、デコレータが指定されている順序になります。次に例を示します。

$element->addDecorator('ViewHelper')
        ->addDecorator('Errors')
        ->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
        ->addDecorator('Label', array('optionalSuffix' => ':', 'requiredSuffix' => ':*'))
        ->addDecorator(array('row' => 'HtmlTag'), array('tag' => 'div', 'class' => 'span4'));

viewHelper デコレーターは、フォーム要素自体をレンダリングします。後続の各デコレータは、既存のコンテンツを「囲んで」います。正確にどのようにレンダリングされるかは、デコレータ自体に少し依存しますが、上記の例では、最後のデコレータとしてクラス「span4」を持つ div タグが表示されます。これは、div が他のすべてをラップすることを意味します。

于 2012-08-14T14:42:44.680 に答える