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