私はカンマ区切りの値で値を追加するテキストボックスを持っています。フォームが投稿されたら、それぞれのCSV値が既に存在するかどうかをデータベーステーブルに対してチェックしたいと思います。もしそうなら、そうでなければエラーメッセージをスローしたいと思います。Zend Validate:zend_validate_DbRecordExistのテキストエリアで、カンマ区切りの各値を検証する方法は?
どうすれば実装できますか?
私はカンマ区切りの値で値を追加するテキストボックスを持っています。フォームが投稿されたら、それぞれのCSV値が既に存在するかどうかをデータベーステーブルに対してチェックしたいと思います。もしそうなら、そうでなければエラーメッセージをスローしたいと思います。Zend Validate:zend_validate_DbRecordExistのテキストエリアで、カンマ区切りの各値を検証する方法は?
どうすれば実装できますか?
カスタムバリデータが必要です。 Zend_Validate_Abstract
を拡張するか、単にコールバック・バリデーターを使用するだけです。
そうするために、あなたの要素にこれを追加する必要があります。
$elem = new Zend_Form_Element_Text('elem_name');
$elem->setLabel('Label Name:')
->setRequired(true)
->addValidator('callback', true, array('callback' => array($this, 'functionName')));
$this->addElement($elem);
と同じクラスで(通常は自分のフォームはZend_Formのを拡張するクラスである)、このメソッドを追加します。
public function functionName($csvString) {
// stuff here using explode(',', $csvString)
// foreach() to iterate over the result and match against the db each $value
}
詳細については、explode()を参照してください。
しかし、フォーム要素が複数回、さまざまな形式で呼び出される場合は、コールバックを使用することはお勧めしませんが、独自のバリデータを記述することをお勧めします。同じだけど。バリデータを書き込む方法の詳細については、Take a look hereを参照してください。
Zend_Validate_Db_RecordExistsを使用するだけで、これを直接達成できるのは本当に疑問です。私は、この目的のためにカスタムバリデーターを作成するのが最善の解決策だと考えています。あなたの価値を取るものは、$valueArray = explode(',', $value);
に基づいてそれを分解し、次にその要素がdbに存在するかどうかを$ valueArrayチェックごとに確認します。これはあまりにも難しいはずはありません。あなたはカスタムバリデータについて考えていない場合this役に立つかもしれません。
私の場合、あなたの答えは完璧ですが、私はすべての無効なコンマ区切り値を抽出し、これらの値すべてを下のテキストエリア要素と同じようにエラーとして表示する必要があります。だから私はコールバックバリデータのtrueまたはfalseだけを返すことができますが無効な値を収集することはできません提案したメソッドによって。だから、私は最終的に$ form-> isValid($ _ POST)を使ってフォームを検証しています。値を爆発させ、別々にチェックして、データベース全体を収集し、$ element-> addError($ invalid_csv。無効'); –