Zend_Elements クラスを使用しながらフォームのレイアウト/デザインを制御する最良の方法と思われるため、ビュー スクリプトを使用して Zend フォームをレンダリングしたいと考えています。
ビュー スクリプトから、要素を でレンダリングします$this->element->getElement('elementName')
。
要素の名前に問題があります。これは、実際にはフォーム内のサブフォーム内のサブフォームです。
FormElements デコレータを使用したとき、要素の完全修飾名は form[subForm][subForm][element] でした。これは適切でした。viewScript デコレータに移動すると、subForm[subForm][element] に変わりました。
これを修正するには PrepareElements デコレータを使用する必要があることは理解していましたが、これにより名前が form[subForm][form][subForm][subForm][elements] に変更されました (最初の 2 つの名前が 2 倍になりました)。
これをどのように処理すればよいですか?
ありがとう。
更新: PrepareElements をデバッグしようとしましたが、何をしているのか本当にわかりません。最初の反復では問題なく動作するように見えますが、中間のサブフォームの 1 つで実行すると、再び form[subform] プレフィックスが追加されます。
PrepareElements デコレータを使用していないときは、名前に「form」プレフィックスがありません (つまり、form[subForm][element] ではなく、subForm[element] のみを取得します)。
どうにかしてこれを修正することはできますか?
私は属しているToを変更しようとしましたが、それは「subForm」プレフィックスを置き換えただけです。
実際に欠けているのは、サブフォームの属しているメソッドのようです。
繰り返しますが、これはすべて ViewScript デコレータによるものです。FormElements デコレータで問題なく動作します。
更新 2:明確にするために、この名前の変更は気にしませんが、 form->populate を呼び出すと、フィールドにデータが入力されなくなります。
編集:問題をこれに絞り込んだと思います:値をsetDefaultsに戻すと、値は次のように並べられます:
array(
\"formElements1-name\" => value1... \"subFormName\" => array(
\"parentFormName\" => array(
\"subFormName\" => subForm-values-array
)
)
... ここでの主な問題は、"parentFormName" => "subFormNAme"..
何を繰り返すかということです。私はすでにメインフォームにいます。を設定したことが原因だと思いますがsetElementsBelongTo(formName[subFormName])
、そうしないと、サブフォームの値がフォームから完全に分離されてしまいます。
つまり、配列 = 配列( \"formName\" => 配列( formValues ), \"subFormNAme\" => 配列( subFormValues )
、私はそれがそうであることを期待していますが
array(
formName => array(
subFormNAme => values-array
)
)...
これを機能させることさえ可能ですか?