Пользовательский элемент Zend_Form исчезает после проверки - PullRequest
1 голос
/ 21 октября 2010

Я создал пользовательский элемент формы, который позволяет мне размещать текст в произвольном месте в моей форме:

<?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);
}

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

Оказывается, проверка была нарушена для статического элемента формы.Чтобы решить эту проблему, я переопределил метод isValid () в моем Plano_Form_Element_Note классе:

public function isValid($value)
{
    return true;
}
1 голос
/ 21 октября 2010

Альтернативным подходом для размещения произвольного статического содержимого в форме является AnyMarkup decorator .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...