Zend_Form装饰器:无法查看错误消息(验证)

时间:2012-08-29 11:57:51

标签: php zend-framework zend-form decorator zend-decorators

当我们将装饰器添加到zend中的表单元素时,验证消息不会显示原因吗?

代码示例:

$this->addElement('Text', 'Last_Name',array(
        //'decorators' => $this->elementDecoratorsTr,
        'label' => 'Last Name:',
        'required' => false,
        'filters' => array('StringTrim'),
            'validators' => array(array('validator' => 'StringLength','validator' => 'Alpha')) 
        ));

2 个答案:

答案 0 :(得分:1)

以下是Zend_Form_Element源代码:

$decorators = $this->getDecorators();
if (empty($decorators)) {
    $this->addDecorator('ViewHelper')
        ->addDecorator('Errors')   // notice Errors decorator
        ->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
        ->addDecorator('HtmlTag', array('tag' => 'dd', 
                                        'id'  => $this->getName() . '-element'))
        ->addDecorator('Label', array('tag' => 'dt'));
}

如果您设置自己的装饰器,则不会加载默认装饰器。

为了查看验证消息,您需要在您设置的装饰器中设置Errors装饰器。

答案 1 :(得分:0)

以下是设置错误消息的装饰器的示例:

我们在:

中有元素
$title = $this->createElement('text', 'title');
    $title->setRequired(true)
        ->setLabel('Title:')
        ->setDecorators(FormDecorators::$simpleElementDecorators)
        ->setAttrib('maxlength', $validationConfig->form->title->maxlength)
        ->addValidator('stringLength', false, array($validationConfig->form->title->minlength,
                $validationConfig->form->title->maxlength,
                'encoding' => 'UTF-8',
                'messages' => array(
                    Zend_Validate_StringLength::INVALID =>
                    'Title must be between %min% and %max% characters',
                    Zend_Validate_StringLength::TOO_LONG =>
                    'Title cannot contain more than %max% characters',
                    Zend_Validate_StringLength::TOO_SHORT =>
                    'Title must contain more than %min% characters')));                     
    $this->addElement($title);

这是带有表单装饰器的类,你可以在那里做很多:

 class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }
相关问题