当我们将装饰器添加到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'))
));
答案 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'))
);
}