2011-06-03 37 views
0

Im無法禁用填充Zend_Form中的值。Zend_Form禁用之前填充isValid()

我有我自己的表格類。使用隱藏的標記元素,我希望每次調用(或重新發布)表單時動態設置隨機值。我認爲setValue會完成這項工作。

class MY_Form_Test extends Zend_Form { 
    public function init() { 
    ... 

    $this->addElement('hidden', 'token'); 
    $this->getElement('token')->setValue(uniqid('',true)); 
    ... 
} 

但是:當我有簡單的控制器是這樣的。除了生成新的隱藏值之外,Zend自動填充舊的隱藏值。

$form = new JC_Form_Test(); 
if($form->isValid($_POST)){ 
    // Action ... 
} 
else{ 
    // Error 
} 

SOLUTION:我發現的唯一的解決方法是調用中的setValue和的Controler後的isValid方法。例如。在錯誤塊。

問題:是否有任何方式直接在表單類中設置元素值或者在表單類中或在調用isValid()之前禁用填充值?

+1

你有沒有考慮過使用Zend_Form_Element_Hash而不是創建自己的令牌? – Marcin 2011-06-03 13:33:28

回答

0

SECOND SOLUTION:我發現的第二個解決方案是在Form類中重載isValid()方法。喜歡這個。然後我不需要將setValue()放入每個控制器中。

class MY_Form_Test extends Zend_Form { 

    ... 

    public function isValid($data){ 
    // Propagate values 
    $valid = parent::isValid($data); 

    $this->getElement('token')->setValue(uniqid('',true)); 

    return $valid; 
} 

是否有其他解決方案,例如:一些元素選項做這個工作更簡單?

1

我認爲這是最好的方法。

我使用Zend Framework進行工作,並擁有自己的庫來覆蓋一些Zend類。

它不壞改變一些東西,但不直接做Zend框架內