1

カンマ区切りの値で値を追加するテキストボックスがあります。フォームが投稿されたら、各CSV値をデータベーステーブルと照合して、それぞれがすでに存在するかどうかを確認します。もしそうなら、私はエラーメッセージをスローしたいです、そうでなければそれは問題ありません。

どうすればこれを実装できますか?

4

2 に答える 2

4

必要なのはカスタムバリデーターです。拡張する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()を参照してください。

ただし、フォーム要素が複数回呼び出され、異なるフォームで呼び出される場合は、コールバックを使用することはお勧めしませんが、独自のバリデーターを作成することをお勧めします。ただし、理論は同じです。バリデーターの作成方法の詳細については、こちらをご覧ください。

于 2012-04-02T08:07:30.563 に答える
2

これがZend_Validate_Db_RecordExistsを使用するだけで直接達成できるかどうかは本当に疑わしいです。最善の解決策は、この目的のためにカスタムバリデーターを作成することだと思います。値を取得する何かが、に基づいてそれを$valueArray = explode(',', $value);分解し、$ valueArrayごとに、要素がデータベースに存在するかどうかを確認します。これはそれほど難しいことではありません。カスタムバリデーターについてのアイデアがない場合は、これが役立つ場合があります。

于 2012-04-02T08:06:19.037 に答える