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反正,每一个输入赞赏:)