//解決策 Zend Sourcecodeを参照している間に(質問する前に...)、私は最良の解決策を見つけました。バリデータからフィールドを抽出するための最良のアプローチ
//Inside Controller before valling $form->isValid()
$form->getElement('x')->getValidator('Db_NoRecordExists')->setExclude(array(
'field'=>'some_id',
'value'=>$idToEdit
))
//最初の質問 私はZend_Formのを拡張を通じて、私のフォームを作成:抽象DB検証クラスは、私たちはその後、素敵な流れの中でそれを使用することができます機能setExclude()
を得ました。そして、私はaddAction()
とeditAction()
に1つの書式を使用します。編集プロセスの中でElementsを削除したいときは、$form->removeElement('x')
で簡単に行うことができます。
しかし、バリデータからフィールドを削除するにはどうすればよいでしょうか?
1)を除去し、フォーム
//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)何か他に編集IDを注入新たに設定されたバリ
//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とにかく、すべての入力は高く評価されています:)