0

config.ini ファイルに次のものがあります: (Zend_Form_Element)

site_status.name = "site_status"
site_status.type = "select"
site_status.label = "Status"
site_status.options.multiOptions.active.key = "Active"
site_status.options.multiOptions.active.value = "Active"
site_status.options.multiOptions.active.key = "Inactive"
site_status.options.multiOptions.active.value = "Inactive"

ご覧のとおり、これはドロップダウン (選択) ボックスであるはずですが、標準のテキスト ボックスとしてレンダリングされています。私は何を間違っていますか?

--> 編集

要素をフォームに結び付けるのではなく、データベースに結び付けようとしています: 私のコードでは、次のようになります。

[{tablename}] // the table name would represent a section in the ini
{column}.name = "{column_name/form_field_id}";
{column}.type = "{form_element_type}"
{column}.label = "{form_element_label}"
...

そこから、フォームがデータを表すデータベース テーブル (必要に応じて 1 つ以上のテーブル) を取得します。このアプローチの理由は、(今後)、特定のフォームに属するフィールド/要素のリストである構成ファイルを (ini またはその他のストレージ方法によって) 定義したいということです (プログラマー以外のタイプが簡単に編集できること)、「汎用」フォーム クラスが読み取り、要素情報を取り込み、その場でフォームを作成すること。

ただし、これはまだ理解していない別の問題を引き起こします。それは、選択要素にテーブルルックアップを使用する方法です(ルックアップのデータベース検索をフォームにコーディングせずに、非ユーザーが簡単にプログラミングなしで純粋に構成を定義しますが、それはここでの私の質問の一部ではないまったく別のトピックです. (とにかく、問題のその部分に対する実行可能なアイデア/解決策があると思います) -- 追加の構成エントリと一般的なルーチンかなり。

私の思考プロセスと、上記の例のようにそれを行っている理由が明確になることを願っています.

4

1 に答える 1

1

Zend_Configのインスタンスを構築するためにa を使用したことはまだありませんZend_Form

しかし、コードを見ると、インスタンスをパラメーターとしてZend_Form::addElement()直接とらないことがわかります。むしろ、インスタンスを form constructorZend_Configに渡す必要があるようです。また、構成キーを呼び出しにマップするには、構成形式をもう少し深くする必要があるようです。Zend_ConfigsetXXX()

path/to/config/myForm.ini

[myForm]

myForm.elements.site_status.name = "site_status"
myForm.elements.site_status.type = "select"
myForm.elements.site_status.label = "Status"
myForm.elements.site_status.options.multiOptions.active.key = "Active"
myForm.elements.site_status.options.multiOptions.active.value = "Active"
myForm.elements.site_status.options.multiOptions.inactive.key = "Inactive"
myForm.elements.site_status.options.multiOptions.inactive.value = "Inactive"

次にインスタンス化します。

$formConfig = new Zend_Config_Ini('path/to/config/myForm.ini', 'myForm');
$form = new Zend_Form($formConfig);

テストされていませんが、この例を見ると:

Zend_Config で Zend_Form を使用する - Andrew Vayanis

上記のような感じです。

アップデート

@Aaron からのコメント/フィードバックを考慮して、さらに 2 つのアプローチがあります。

  1. を拡張して、要素自体を記述する浅いインスタンスを渡すZend_Formようなメソッドを実装することができます。実際、再帰的なアプローチをとって をオーバーライドすることもできます。最初のパラメータが のインスタンスである場合は、コンポーネント データを使用して呼び出します。addElementByConfigZend_ConfigaddElement()Zend_ConfigaddElement()

  2. 原子性と再利用性が、Zend_Config要素を記述するために使用する際の主な利点である場合、おそらくカスタム要素を拡張して作成しますZend_Form_Element。次に、これらの要素を任意の形式で使用できます。

于 2011-08-26T08:06:56.160 に答える