2011-10-20 75 views
2

//解決方案 好的,瀏覽Zends Sourcecode(應該在提問之前應該這樣做),我找到了最佳解決方案(我猜)。摘要DB驗證類有一個函數setExclude(),所以我們可以使用它在一個很好的流程:從驗證程序中提取字段的最佳方法

//Inside Controller before valling $form->isValid() 
$form->getElement('x')->getValidator('Db_NoRecordExists')->setExclude(array(
    'field'=>'some_id', 
    'value'=>$idToEdit 
)) 

//最初的問題 我通過擴展了Zend_form創建我的形式。我使用一個表格addAction()editAction()。當我想在編輯過程中刪除元素時,我可以通過$form->removeElement('x')輕鬆完成。

但是,從驗證器中刪除字段的最佳方法是什麼?

1)刪除和添加註射編輯ID到表單

//Forms Contstructor 
public function __construct($idToEdit=0, $options=null) 
{ 
    $this->setIdToEdit($idToEdit); 
    parent::__construct($options); 
} 

//within init() 
$formField->addValidator('Db_NoRecordExists', true, array(
    'table'=>'table', 
    'field'=>'field', 
    'exclude'=>array(
    'field'=>'id', 
    'value'=>$this->getIdToEdit() 
) 
)); 

//Controller calling the form like this: 
$form = new Custom_Form($this->_getParam('id'), $options); 

3)別的東西新設置的驗證

//Controllers editAction() 
$form->removeValidator('Db_NoRecordExists'); 
$form->addValidator('Db_NoRecordExists', true, array(
    'table'=>'table', 
    'field'=>'field', 
    'exclude'=>array(
    'field'=>'id', 
    'value'=>$this->_getParam('id') 
) 
)); 

2)? 也許有什麼我失蹤,雖然不知何故這兩個想法都不看好我:S反正,每一個輸入讚賞:)

回答

0

對於一個更清潔的使用這裏作爲答案post

//解決方案好的,所以在瀏覽Zends Sourcecode(應該在提問之前已經這麼做了)之後,我找到了最好的解決方案(我猜)。抽象數據庫驗證類得到了一個 函數setExclude(),所以我們可以在一個很好的流程中使用它:

//Inside Controller before valling $form->isValid() 
$form->getElement('x')->getValidator('Db_NoRecordExists')->setExclude(array(
    'field'=>'some_id', 
    'value'=>$idToEdit 
)) 
相關問題