2011-10-20 49 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 
)) 
相关问题