2010-09-08 54 views
1

我正在使用Zend_Form和註冊頁面。我有一個複選框,如果選中,將顯示額外的結算字段。在我的表單實例中,如果複選框被選中,我只希望這些額外的字段是setRequired(true)。有沒有辦法做到這一點?現在的問題是我必須將所有計費字段設置爲setRequired(false),但是如果用戶選中該複選框,邏輯將不關心這些字段是否爲空,因爲它們不是必需的。zend_form只有在複選框被選中時才需要設置字段

alt text

回答

0

好了,這裏是我落得這樣做。我將結算信息創建爲Zend_Form_SubForm並將其添加到主註冊表單中。然後,在我的控制器中,在後期,我檢查是否複選框被選中。如果不是,那麼我從主窗體中刪除子窗體並驗證窗體。如果出現錯誤,我重新添加子表單,以便在重新繪製表單時顯示字段。希望這將有助於某人。

1

我有同樣的問題,我最後寫我自己的驗證:

<? 
class Mh_Validator_RequiredIfCheckbox extends Zend_Validate_Abstract 
{ 
    const SHOULD_BE_NOT_EMPTY = 'shouldBeNotEmpty'; 

    private $_field; 
//protected $_field; 
public function __construct($field) 
{ 
    $this->_field = $field; 
}  

    protected $_messageTemplates = array(
    self::SHOULD_BE_NOT_EMPTY =>"This field is required" 
    ); 

    /** 
    * Defined by Zend_Validate_Interface 
    * 
    * @param string $value 
    * @return boolean 
    */ 

    public function isValid($value, $context = null) 
    { 

     if($context[$this->_field]==0 && $value == null) 
     { 
      $this->_error(self::SHOULD_BE_NOT_EMPTY); 
      return false; 
     } 
    return true; 

    } 
} 
-1

爲什麼不直接檢查POST是否已發出(如果這是你的窗體的方法),如果是看複選框的值並在驗證$ form-> isValid($ formData)之前將所有元素設置爲false(可能方便將它們保留在數組中)?

實施例:

if ($this->getRequest()->isPost()) { 
    $formData = $this->getRequest()->getPost(); 
    if ($formData['billing_information_different'] == '1') { 
     $billingElement1->setRequired(true); 
     $billingElement2->setRequired(true); 
    } 
} 
相關問題