我一直在搜索大部分時間試圖找到這個答案,但我終於承認失敗。初始化一個可變數據長度的zend表單
我正在處理Zend Framework中需要能夠處理可變數據長度的表單。我有一個表單,其中包含一些通用字段,用於指定一些通用參數(項目名稱,語言等),這些參數很容易處理,但我也有一個稱爲參數的子表單,其中包含可變數量的鍵/值鍵讓您將通用參數添加到數據中。示範表格如下:
<form>
<input type="text" name="item_name" />
<input type="text" name="item_lang" />
<!-- etc -->
<input type="text" name="parameters[1][key]" />
<input type="text" name="parameters[1][value]" />
<input type="text" name="parameters[2][key]" />
<input type="text" name="parameters[2][value]" />
<input type="text" name="parameters[3][key]" />
<input type="text" name="parameters[3][value]" />
<input type="text" name="parameters[4][key]" />
<input type="text" name="parameters[4][value]" />
<!-- and so on -->
</form>
注:以上是對實際表格的大量簡化。它也是手動構建的,而不是由zend_form生成。
參數的數量可以不同,並可以使用JavaScript處理客戶端,但我真的很努力初始化表單時填充它從預先存在的數據更新。
我可能有2個參數存儲每個項目,我可能有20個,我可能根本沒有。所以我需要表單根據數據的初始狀態有2或20個參數或者沒有參數輸入。不幸的是,這些數據在init()中不可用,因爲它在調用setDefaults()之前不在表單中。
這意味着我不能對錶單的初始狀態執行一個foreach()來爲已經存在的數據生成適當數量的輸入框。
我相信我一定會錯過一些明顯的東西,但是Zend文檔相當可怕,而且我找不到任何這種用例的例子。它肯定不會那麼罕見,它在zend_form中不受支持。我如何在允許表單初始狀態變化的狀態下生成表單?
ETA:我的窗體上的init()方法看起來像這樣(簡化匹配爲例):
public function init()
{
parent::init();
$this -> addElement ('text', 'item_name');
$this -> addElement ('text', 'item_lang');
$this -> addSubForm (new Zend_Form_SubForm(), 'parameters');
foreach ($phantom_data as $key => $val)
{
$params = new Zend_Form_SubForm();
$params -> addElement ('text', 'key');
$params -> addElement ('text', 'value');
$this -> parameters -> addSubForm ($params, $key);
}
}
這是一個可怕的哈克解決方案,但它看起來也是唯一可行的解決方案。我無法相信zend表單如此無能爲力,無法將這種用戶情況考慮在內。我之前在POPHP中做過類似的很多次,而不必跳過這些類型的籃球。 – GordonM