15

私は2つの選択を持つフォームを持っています。最初の選択の値に基づいて、AJAX を使用して 2 番目の選択の値を更新します。これを行うと、フォームが無効になります。そこで、次の変更を行いました。

        $form=$this->getAddTaskForm(); //the form

        if(!$form->isValid($_POST)) {
            $values=$form->getValues();

            //get the options and put them in $options

                $assignMilestone=$form->getElement('assignedMilestone');
                $assignMilestone->addMultiOptions($options);

        }

        if($form->isValid($_POST)) {
               //save in the database
            }else {
               //redisplay the form
            }  

基本的に、それが有効かどうかを確認し、ユーザーが最初の選択の値を変更したかどうかを確認します。2 番目の選択に入力されたオプションを取得し、それらをフォームに入力します。それから私はそれをもう一度検証しようとします。ただし、これは機能しません。誰でも理由を説明できますか?同じ「干し草の山に値が見つかりませんでした」が存在します。

4

4 に答える 4

32

バリデーターの無効化を試みることができます:

あなたの Form.php で

$field = $this->createElement('select', 'fieldname');
$field->setLabel('Second SELECT');
$field->setRegisterInArrayValidator(false);
$this->addElement($field);

3 行目でバリデーターが無効になり、動作するはずです。

于 2012-06-28T12:37:25.977 に答える
3

さらに、データベースなどを保護するために、独自の InArray Validator を追加する必要があります。

Zend Framework 1 では、次のようになります。

$this->addElement('select', $name, array(
            'required' => true,
            'label' => 'Choose sth:',
            'filters' => array('StringTrim', 'StripTags'),
            'multiOptions' => $nestedArrayOptions,
            'validators' => array(
                array(
                    'InArray', true, array(
                        'haystack' => $flatArrayOptionsKeys,
                        'messages' => array(
                            Zend_Validate_InArray::NOT_IN_ARRAY => "Value not found"
                        )
                    )
                )
            )
        ));

$nestedArrayOptions は multiOptions で、$flatArrayOptionsKeys にはすべてのキーが含まれています。

于 2014-12-17T15:47:36.003 に答える