2012-05-16 56 views
1

我一直在搜索大部分時間試圖找到這個答案,但我終於承認失敗。初始化一個可變數據長度的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); 
    } 
} 

回答

1

可以使數據avaialbe形成像

My_Form extends Zend_Form 
{ 

protected $_myCustomData; 

public function __construct($options = null,$myCustomData) 
{ 
    $this->_myCustomData = $myCustomData; 
    parent::__construct($options); //Its important you call parent after above line or init will get call before initilizing customData 
} 

public function init() 
{ 
    $this->_myCustomData ; //here you are free to use your custom data 

} 

} 
+0

這是一個可怕的哈克解決方案,但它看起來也是唯一可行的解​​決方案。我無法相信zend表單如此無能爲力,無法將這種用戶情況考慮在內。我之前在POPHP中做過類似的很多次,而不必跳過這些類型的籃球。 – GordonM

相關問題