我爲zend表單創建了一個自定義的viewscript。在表單中,有一個文件元素。當我運行代碼echo $this->element->elementname->renderViewHelper()
時,它可以在除文件元素之外的所有元素上正常工作。當我將定製viewscript內運行我的文件元素在下面的代碼,我得到以下錯誤:Uncaught exception 'Zend_Form_Element_Exception' with message 'Decorator by name ViewHelper does not exist'
Zend Custom ViewScript for Form not rendering file element
<?php if($this->element->avatarimage->hasErrors()):?>
<div class="control-group error">
<?php else: ?>
<div class="control-group">
<?php endif;?>
<label for="avatarimage" class="control-label">Avatar Image</label>
<div class="controls">
<?php echo $this->element->avatarimage->renderViewHelper();?>
<?php if($this->element->avatarimage->hasErrors()):
$messages = $this->element->avatarimage->getMessages();
$messages = array_values($messages);
$message = $messages[0];
echo '<span class="help-inline">'.$message.'</span>';
endif;
?>
</div>
</div>
我怎麼可以將我的文件元素爲我的自定義窗體viewscript?
這半解決了我的問題。當我這樣做時,我會獲得附加到avatarimage元素(dt和dd)的額外html內容。與其他每個元素一樣,調用renderViewHelper只返回輸入html。 – jkushner
您需要從表單類的元素中移除裝飾器。例如$ element-> removeDecorator('DtDdWrapper'); – dimirc
順便說一句,你也可以刪除其他裝飾:$ element-> removeDecorator('label')$ element-> removeDecorator('htmlTag');你可以在這裏閱讀更多關於裝飾器http://framework.zend.com/manual/en/zend.form.standardDecorators.html – dimirc