Zend multi Checkbox元素的单个错误消息而不是多个

时间:2012-09-18 09:57:57

标签: php zend-framework zend-form

我的表单上有multiCheckbox元素和公共回调验证器。

Validator工作正常,但错误消息包含重复的字符串,以分号而不是单个消息分隔。如果选中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;
    }));

3 个答案:

答案 0 :(得分:1)

您始终可以使用您用于设置自定义错误消息的Validator类的 setMessages() 方法。

这是我的代码

$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"),
        ));

答案 1 :(得分: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;
}

答案 2 :(得分:0)

通过创建基于Zend_Validate的自定义验证器解决了这个问题。