2010-10-21 75 views
1

我創建了一個自定義的表單元素,讓我把文本中的任意位置在我的表格:定製的Zend_Form元素驗證後消失

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

這個工程就像一個魅力,但只要我擊中$形式 - > 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); 
} 

回答

3

原來的驗證是打破了靜態的表單元素。爲了解決這個問題,我已重寫的isValid()方法在我Plano_Form_Element_Note類:

public function isValid($value) 
{ 
    return true; 
}