从验证器中排除字段的最佳方法

时间:2011-10-20 08:01:54

标签: php zend-framework zend-form

我通过扩展Zend_Form来创建表单。我为addAction()editAction()使用了一个表单。当我想在编辑过程中删除元素时,我可以通过$form->removeElement('x')轻松完成。

但是从验证器中删除字段的最佳方法是什么?

1)删除并添加新设置的验证器

//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)将编辑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)还有别的吗? 也许甚至还有一些我想念的东西,对我来说虽然不知怎的,这两个想法对我来说都不太好。

1 个答案:

答案 0 :(得分:0)

为了更清楚地使用SO,请将答案作为帖子

//解决方案好的,所以在浏览Zends Sourcecode时(应该在询问之前就已经这样做了)我找到了最好的解决方案(我猜)。 Abstract DB Validation类得到了一个 函数setExclude()所以我们可以在一个很好的流程中使用它:

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