Я создал пользовательский элемент формы, который позволяет мне размещать текст в произвольном месте в моей форме:
<?php
class Plano_Form_Element_Note extends Zend_Form_Element_Xhtml
{
public $helper = 'formNote';
/**
* Default decorators
*
* @return void
*/
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Label')
->addDecorator(array('row' => 'HtmlTag'), array('tag' => 'div', 'class' => 'form-row clearfix'));
}
}
}
Это работает как шарм, но как только я нажимаю $form-> isValid () элемент становится пустым, и только обертка показывает :
<div class="form-row clearfix"></div>
Элементы добавляются с использованием подчиненных форм (метод в моем классе формы ниже):
/**
* Setup form elements and generate subforms
*
* @return Event_Form_Feedback_Enter
*/
protected function setupForm()
{
$partMapper = new Event_Model_FeedbackPart_Mapper();
$parts = $partMapper->fetchByFeedbackId($this->getFeedback()->getId(), array('order ASC', 'id DESC'));
foreach ($parts as $part)
{
switch ($part->getType())
{
case Event_Model_FeedbackPart::TYPE_TEXT:
$subform = new Event_Form_Feedback_Enter_Text();
break;
case Event_Model_FeedbackPart::TYPE_QUESTION_OPEN:
$subform = new Event_Form_Feedback_Enter_Question();
break;
case Event_Model_FeedbackPart::TYPE_QUESTION_MC:
$subform = new Event_Form_Feedback_Enter_MultipleChoiceQuestion();
break;
}
$subform->setup($part);
$this->addSubForm($subform, 'part-' . $part->getId());
}
$this->addSubmit();
}
... а вот создание элемента в фактическом классе формы (Event_Form_Feedback_Enter_Text
):
protected function setupForm()
{
$element = new Plano_Form_Element_Note('description');
$element->setValue($this->getPart()->getDescription());
$this->addElement($element);
}