2012-06-05 3 views
1

У меня есть следующий элемент формы 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) " 
" 
    } 
} 
+0

Я скопировал предоставленный вами код формы и добавил его в тестовую форму, и я смог увидеть сообщение об ошибке, которое было правильно отображено. Какие декораторы используются для этого элемента, что-то особенное? – drew010

+0

Привет, Дрю, спасибо за ваш ответ. Единственный декоратор, который я использую, - это viewcript. См. Мое редактирование выше. – Garry

+0

Каковы стандартные декораторы элементов, добавленные в 'Zend_Form_Element'? Я вижу, что вы визуализируете форму с помощью декоратора ViewScript, но каждый элемент использует свой собственный набор декораторов для рендеринга. Шансы - это то, что он использует, не имеет декоратора «Ошибки». Вы можете попробовать 'var_dump ($ this-> element-> price-> getDecorators());' посмотреть, что они собой представляют. – drew010

ответ

1

Это иногда вызванное забыть включить «ошибки» в виде декоратора для элемента. Если вы используете пользовательский декоратор, сначала проверьте это.

+0

Привет, NaNuk, Спасибо за ваш ответ. Как я только что упомянул Дрю выше, единственный декоратор, который я использую, является просмотром, см. Мое редактирование выше. – Garry

0

Я была такая же проблема, я только с помощью ViewScript как вы. Это решило его:

($this is in the form class I created) 
$this->setDecorators(array(
     array('ViewScript', 
       array('viewScript' => '/formElementViewscripts/editRoughDraft/_form.phtml')), 
     'Form' 
    )); 

Вы также должны добавить декоратор «форма» по умолчанию в форму, если вы хотите, чтобы иметь возможность получать эти сообщения. Я попытался просмотреть код, но я не мог точно определить, почему.

Смежные вопросы