2

フォームに共通のコールバックバリデーターを備えたmultiCheckbox要素があります。

バリデーターは正常に機能しますが、エラーメッセージには、単一のメッセージではなくセミコロンで区切られた重複した文字列が含まれています。2つのチェックボックスが選択されている場合-2つのエラーメッセージ、4-4のエラーメッセージなど。

重複ではなく単一のエラーメッセージのみを表示するようにコードを変更する方法を知っていますか?

 $rolesElement = $form->getElement('role_ids');
 $rolesElement->addValidator(new Zend_Validate_Callback(function ($value) use ($rolesElement, $administrator) {
        if( *magicHere* ){
            $rolesElement->clearErrorMessages();
            $rolesElement->setErrorMessages(array('blablabla!'));

            return false;
        }
        return true;
    }));
4

3 に答える 3

1
    $form = new Zend_Form ();
    $form->addElement ('MultiCheckbox', 'name', array (
        'label' => 'test',
        'multioptions' => array (
            1 => 'fake',
            65 => 'dsa',
            165 => 'dsa22'
        )
    ));

    $form->name->addValidator ('Callback', true, array (
        'callback' => array (
            $this,
            'val'
        ),
        'messages' => array (
            'callbackValue' => 'Error in here'
        )
    ));

この場合、検証関数はエラー メッセージを追加しません。ただのブール値。

function val ($value, $values)
{
    return false;
}
于 2012-09-18T13:39:22.087 に答える
1

setMessages()カスタム エラー メッセージの設定に使用している Validator クラスのメソッドをいつでも使用できます。

これが私のコードです

$emailIdValidator->setMessages(array(
            Zend_Validate_EmailAddress::DOT_ATOM => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID_FORMAT => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID_HOSTNAME => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID_LOCAL_PART => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID_MX_RECORD => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::INVALID_SEGMENT => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::LENGTH_EXCEEDED => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
            Zend_Validate_EmailAddress::QUOTED_STRING => $this->coreUtils->getApplicationMessages("EMAIL_ERROR"),
        ));
于 2012-09-18T10:23:42.077 に答える
0

この問題は、Zend_Validate に基づいて独自のカスタム バリデータを作成することで解決されます。

于 2012-09-19T09:27:59.270 に答える