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反正,每一個輸入讚賞:)