0

選択/ドロップダウンで構成されるフォームがあります。デフォルト値を-1に設定しました。フォームを送信するときに、送信された値がデフォルト値と等しくないことを検証したいと思います。私は試しsetRequired(true)ましたが、私が知る限り、notEmptyそれはバリデーターを追加するための便利な方法であり、実際には私が望んでいるものではありません。

これが私のフォームの一部です:

    $select = new Zend_Form_Element_Select('myselect');
    $select->setMultiOptions(array(
                        '-1' => 'Gender',
                        '0' => 'Female',
                        '1' => 'Male'
                    ))
                    ->addValidator(new Zend_Validate_Int(), false);

    $this->setDefaults(array('myselect' => -1));

そして、これが私のコントローラーです:

if ($this->getRequest()->isPost()) {
            $form = new My_Form_Contact();

            if ($form->isValidPartial(array('myselect' => $this->getRequest()->getPost('myselect')))) {
                // "myselect" is valid
            }

isValidPartialデフォルト値とは異なる値を持つ要素に応じて異なるロジックを使用する必要があるため、このメソッドを使用する必要があります。必要なのはnotEqualバリデーターだと思いますが、見つかりませんでした。自分でバリデーターを作ることは可能だと思いますが、まずはもっと簡単な方法があるかどうか聞いてみたいと思いました。も見ましたZend_Validate_Identicalが、今回は活用できないと思います。

要約すると、送信された値がデフォルト値と等しくない場合にのみ、選択が正常に検証されるようにします。

4

1 に答える 1

1

最も簡単な解決策は、デフォルトとして空の文字列を使用することです。

$select->setMultiOptions(array(
                    '' => 'Gender',
                    '0' => 'Female',
                    '1' => 'Male'
                ))
                ->addValidator(new Zend_Validate_Int(), false)
                ->addValidator(new Zend_Validate_NotEmpty(), false);

$this->setDefaults(array('myselect' => ''));

でも、あなたはすでにそれを考えていて、何らかの理由でそれを割り引いたと思います。

したがって、次に簡単なのは次を使用することGreaterThan()です。

$select->setMultiOptions(array(
                    '-1' => 'Gender',
                    '0' => 'Female',
                    '1' => 'Male'
                ))
                ->addValidator(new Zend_Validate_Int(), false)
                ->addValidator(new Zend_Validate_GreaterThan(-1), false);

$this->setDefaults(array('myselect' => '-1'));

それがあなたが探しているものであることを願っています。

于 2012-07-19T00:53:36.903 に答える