У меня есть следующий элемент формы ZF.Zend_Form не отображается сообщение об ошибке
$this->addElement('text', 'price', array(
'required' => true,
'label' => 'Price:',
'attribs' => array(
'title' => 'Please enter the value of your artwork'),
'filters' => array('Currency'),
'validators' => array(
array('NotEmpty', true, array(
'messages' => array(
Zend_Validate_NotEmpty::IS_EMPTY =>
"You must enter your artworks price"))),
array('Float', true, array(
'messages' => array(
Zend_Validate_Float::INVALID =>
"You must enter a valid price",
Zend_Validate_Float::NOT_FLOAT =>
"You must enter a valid price"))),
array('GreaterThan', true, array(
'min' => 0.99,
'messages' => array(
Zend_Validate_GreaterThan::NOT_GREATER =>
"You must enter a value of £1.00 or more"))))
));
Последний валидатор Zend_Validate_GreaterThan, которое было установлено сообщение об ошибке, моя проблема заключается в том, что сообщение об ошибке не отображается на форме, когда этот валидатор не удается. Все, что я получаю, это пустой неупорядоченный список!
<ul>
<li></li>
</ul>
Когда я проверяю сообщения, выводимые zend_form, я получаю сообщение об ошибке и сообщении.
array(1) {
["price"]=>
array(1) {
["notGreaterThan"]=>
string(39) "You must enter a value of £1.00 or more"
}
}
Кто-нибудь знает, почему сообщение не отображается в форме?
Большое спасибо заранее
Garry
EDIT
Единственный декоратор Я использую это viewscript для придания формы, на форме у меня есть.
$this->setDecorators(array(
array('ViewScript', array('viewScript' => 'forms/add-item.phtml'))
));
и самим видом.
$attribFilterObj = new Freedom_Zend_Filter_HtmlAttribs();
$attribs = $attribFilterObj->filter($this->element->getAttribs());
?>
<form <?php echo $attribs; ?>>
<dl>
<?php echo $this->element->ArtworkTitle->title->render(); ?>
<?php echo $this->element->ArtworkDescription->description->render(); ?>
<?php echo $this->element->price->render(); ?>
<?php echo $this->element->Genres->render(); ?>
<?php echo $this->element->image->render(); ?>
<?php echo $this->element->add->render(); ?>
</dl>
</form>
РЕДАКТИРОВАТЬ
Выход var_dump выглядит следующим образом
array(5) {
["Zend_Form_Decorator_ViewHelper"]=>
object(Zend_Form_Decorator_ViewHelper)#157 (6) {
["_buttonTypes":protected]=>
array(3) {
[0]=>
string(24) "Zend_Form_Element_Button"
[1]=>
string(23) "Zend_Form_Element_Reset"
[2]=>
string(24) "Zend_Form_Element_Submit"
}
["_helper":protected]=>
NULL
["_placement":protected]=>
string(6) "APPEND"
["_element":protected]=>
NULL
["_options":protected]=>
array(0) {
}
["_separator":protected]=>
string(2) "
"
}
["Zend_Form_Decorator_Errors"]=>
object(Zend_Form_Decorator_Errors)#158 (4) {
["_placement":protected]=>
string(6) "APPEND"
["_element":protected]=>
NULL
["_options":protected]=>
array(0) {
}
["_separator":protected]=>
string(2) "
"
}
["Zend_Form_Decorator_Description"]=>
object(Zend_Form_Decorator_Description)#159 (6) {
["_escape":protected]=>
NULL
["_placement":protected]=>
string(6) "APPEND"
["_tag":protected]=>
NULL
["_element":protected]=>
NULL
["_options":protected]=>
array(2) {
["tag"]=>
string(1) "p"
["class"]=>
string(11) "description"
}
["_separator":protected]=>
string(2) "
"
}
["Zend_Form_Decorator_HtmlTag"]=>
object(Zend_Form_Decorator_HtmlTag)#160 (7) {
["_encoding":protected]=>
NULL
["_placement":protected]=>
NULL
["_tag":protected]=>
NULL
["_tagFilter":protected]=>
NULL
["_element":protected]=>
NULL
["_options":protected]=>
array(2) {
["tag"]=>
string(2) "dd"
["id"]=>
array(1) {
["callback"]=>
array(2) {
[0]=>
string(22) "Zend_Form_Element_Text"
[1]=>
string(16) "resolveElementId"
}
}
}
["_separator":protected]=>
string(2) "
"
}
["Zend_Form_Decorator_Label"]=>
object(Zend_Form_Decorator_Label)#161 (6) {
["_placement":protected]=>
string(7) "PREPEND"
["_tag":protected]=>
NULL
["_tagClass":protected]=>
NULL
["_element":protected]=>
NULL
["_options":protected]=>
array(1) {
["tag"]=>
string(2) "dt"
}
["_separator":protected]=>
string(2) "
"
}
}
Я скопировал предоставленный вами код формы и добавил его в тестовую форму, и я смог увидеть сообщение об ошибке, которое было правильно отображено. Какие декораторы используются для этого элемента, что-то особенное? – drew010
Привет, Дрю, спасибо за ваш ответ. Единственный декоратор, который я использую, - это viewcript. См. Мое редактирование выше. – Garry
Каковы стандартные декораторы элементов, добавленные в 'Zend_Form_Element'? Я вижу, что вы визуализируете форму с помощью декоратора ViewScript, но каждый элемент использует свой собственный набор декораторов для рендеринга. Шансы - это то, что он использует, не имеет декоратора «Ошибки». Вы можете попробовать 'var_dump ($ this-> element-> price-> getDecorators());' посмотреть, что они собой представляют. – drew010