【问题标题】:Can't set custom validator messages in Zend_Form无法在 Zend_Form 中设置自定义验证器消息
【发布时间】:2012-03-01 14:00:49
【问题描述】:

我只是想不通如何在 Zend_Form 对象中设置自定义验证器消息。这是一个示例代码。

$this->addElement('password', 'password', array(
        'label'      => 'Password',
        'decorators' => array('ViewHelper'),
        'filters'    => array('StringTrim'),
        'validators' => array(
            array('Digits', false, array('messages' => array('notDigits' => 'Only digits are allowed here')))
        ),
        'required'   => true

    ));

当我尝试验证输入无效数据的表单时,会出现一条消息“notDigits”。我尝试将 'notDigits' 更改为 Zend_Validate_Digits::NOT_DIGITS,但它仍然无法按预期工作。

非常感谢任何帮助!

【问题讨论】:

    标签: zend-framework zend-form zend-form-element


    【解决方案1】:

    我发现了我的错误。我收到了“notDigits”消息,因为在控制器中我使用了 $form->getErrors() 方法而不是 $form->getMessages()。第一个只返回错误代码,没有消息。

    【讨论】:

      【解决方案2】:

      您设置自定义消息的语法是正确的。在您发布的代码示例中,该元素的唯一装饰器是 ViewHelper,因此不会显示错误消息。

      如果您想查看错误消息,至少添加 Errors 装饰器。试试这个:

      $this->addElement('password', 'code', array(
          'label'      => 'Code',
          'decorators' => array('ViewHelper', 'Errors'),
          'filters'    => array('StringTrim'),
          'validators' => array(
              array('Digits', false,
                  array('messages' => array('notDigits' => 'Only digits are allowed here')))
          ),
          'required'   => true
      );
      

      唯一的变化是将 Errors 装饰器添加到堆栈中。

      【讨论】:

      • 感谢draw010的回复。我没有使用错误装饰器,因为我使用 $form->getErrors() 方法在控制器中捕获错误,所以我可以将它们显示在单独的 DIV 中。错误显示正确,但翻译不适用。
      【解决方案3】:

      试试这个验证器语法。

      $this->addElement("text", "fullname", array(
                              'label' => 'Your Full Name: ',
                              'required' => 'true',
                              'validators' => array(
                                  array('validator' => 'StringLength', 'options' => array('min'=>5, 'max'=>250, 'messages' => array('stringLengthTooShort' => 'The name is too short.'))) 
                              ),
                              'filters' => array('StringTrim'),
                              'decorators' => array("signup")
                          ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2012-08-24
        • 2018-09-26
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多