カンマ区切りの値で値を追加するテキストボックスがあります。フォームが投稿されたら、各CSV値をデータベーステーブルと照合して、それぞれがすでに存在するかどうかを確認します。もしそうなら、私はエラーメッセージをスローしたいです、そうでなければそれは問題ありません。
どうすればこれを実装できますか?
カンマ区切りの値で値を追加するテキストボックスがあります。フォームが投稿されたら、各CSV値をデータベーステーブルと照合して、それぞれがすでに存在するかどうかを確認します。もしそうなら、私はエラーメッセージをスローしたいです、そうでなければそれは問題ありません。
どうすればこれを実装できますか?
必要なのはカスタムバリデーターです。拡張する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()を参照してください。
ただし、フォーム要素が複数回呼び出され、異なるフォームで呼び出される場合は、コールバックを使用することはお勧めしませんが、独自のバリデーターを作成することをお勧めします。ただし、理論は同じです。バリデーターの作成方法の詳細については、こちらをご覧ください。
これがZend_Validate_Db_RecordExistsを使用するだけで直接達成できるかどうかは本当に疑わしいです。最善の解決策は、この目的のためにカスタムバリデーターを作成することだと思います。値を取得する何かが、に基づいてそれを$valueArray = explode(',', $value);
分解し、$ valueArrayごとに、要素がデータベースに存在するかどうかを確認します。これはそれほど難しいことではありません。カスタムバリデーターについてのアイデアがない場合は、これが役立つ場合があります。