// РЕШЕНИЕ Хорошо, поэтому при просмотре в Zends Sourcecode (должно было это сделать, прежде чем спрашивать …) я нашел лучшее решение (думаю). В классах абстрактной проверки базы данных была установлена функция setExclude()
поэтому мы можем использовать ее в хорошем потоке:
//Inside Controller before valling $form->isValid() $form->getElement('x')->getValidator('Db_NoRecordExists')->setExclude(array( 'field'=>'some_id', 'value'=>$idToEdit ))
// Initial QUESTION Я создаю свои формы с помощью расширения 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) Идентификационный код ввода в форму
//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) Что-то еще? Может быть, есть еще что-то еще, что мне не хватает, для меня, хотя почему-то обе идеи не выглядят слишком хорошо для меня: S Anyways, каждый вход оценивается 🙂
Для более чистого использования SO здесь ответ как сообщение
// РЕШЕНИЕ Хорошо, поэтому при просмотре в Zends Sourcecode (должно было это сделать, прежде чем спрашивать …) я нашел лучшее решение (думаю). В классах абстрактной проверки базы данных была установлена функция setExclude (), поэтому мы можем использовать ее в хорошем потоке:
//Inside Controller before valling $form->isValid() $form->getElement('x')->getValidator('Db_NoRecordExists')->setExclude(array( 'field'=>'some_id', 'value'=>$idToEdit ))