Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从验证器中排除字段的最佳方法_Php_Zend Framework_Zend Form - Fatal编程技术网

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

Php 从验证器中排除字段的最佳方法,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,我通过扩展Zend_表单创建表单。我对addAction()和editAction()使用了一种形式。当我想在编辑过程中删除元素时,我可以通过$form->removeElement('x')轻松完成 但是,从验证器中删除字段的最佳方法是什么 1) 删除和添加新设置的验证程序 //Controllers editAction() $form->removeValidator('Db_NoRecordExists'); $form->addValidator('Db_NoRecordE

我通过扩展Zend_表单创建表单。我对
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) 还有别的吗?
也许我还遗漏了一些东西,尽管这两个想法对我来说都不太合适。

为了更简洁地使用,请将答案发布在这里

//解决方案好,所以在浏览Zends源代码时(在询问之前应该这样做…),我找到了最好的解决方案(我猜)。抽象数据库验证类得到了一个 函数setExclude(),这样我们就可以在一个好的流中使用它:

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

为了更干净的使用,所以这里的答案作为一个帖子

//解决方案好,所以在浏览Zends源代码时(在询问之前应该这样做…),我找到了最好的解决方案(我猜)。抽象数据库验证类得到了一个 函数setExclude(),这样我们就可以在一个好的流中使用它:

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