2011-04-30 56 views

回答

2

除了@ Marcin的想法之外,我看到了兩種方法。

  1. 有條件通過創建窗體上的preValidate()方法,把它在你的控制器呼籲相關元素setRequired()。 [真的一樣想法@Marcin,但向下推入形式本身,保持控制器有點精簡]

  2. 創建一個名爲像ConditionallyRequired自定義驗證接受作爲一個選項「其他字段的字段名」。然後將此驗證程序附加到每個元素,並使用「other」元素的名稱進行配置。然後在驗證程序的isValid($value, $context)方法中,如果$context['otherfield']非空,則有條件地測試$value

1

你可以做如下:

if ($this->getRequest()->isPost()) { 

    $textFieldA = $yourForm->getElement('TextFieldA'); 
    $textFieldB = $yourForm->getElement('TextFieldB'); 

    if (!empty($_POST['TextFieldA'])) { 
     $textFieldB->setRequired(true); 
    } 

    if (!empty($_POST['TextFieldB'])) { 
     $textFieldA->setRequired(true); 
    }    

    if ($mainForm->isValid($_POST)) {     
     // process the form    
    } 
} 

基本上,你的帖子後添加驗證,但形式驗證之前。 希望這有助於。