2011-11-26 68 views
0

使我在的schema.yml:添加所需的真實,模板

Quest: 
    columns: 
    yes_no: { type: boolean, notnull: true } 
    answer: { type: string(100), notnull: false } 

和QuestForm

$this->widgetSchema['yes_no'] = new sfWidgetFormSelectRadio(array('choices' => array(1 => 'yes', 0 => 'no'))); 

在模板default我想只渲染在啓動這個小部件,但如果用戶檢查「否」,然後我想呈現小工具答案也與文本框,這必須是required => true,不爲空。 製作它的最佳方法是什麼?

+0

當用戶選中「無」,形式已經呈現,所以這是來不及說要渲染答案小部件也是如此。 – greg0ire

回答

1

Symfony-like,這是用PostValidator實現的!

首先,如@samura提到的,通過(例如)jQuery隱藏和觀察答案小部件,然後使用PostValidator。

// Form.class.php 
/* ..... */ 
$this->validatorSchema->setPostValidator(
    new sfValidatorCallback(array('callback' => array($this, 'checkAnswer'))) 
); 

然後實現您的驗證

// Form.class.php something else 
public function checkAnswer($validator, $values) 
{ 
    if (($values['yes_no'] == '0') && (empty($values['answer'))) 
    { 
     $error = new sfValidatorError($validator, 'Invalid answer'); 

     // throw answer error 
     throw new sfValidatorErrorSchema($validator, array('answer' => $error)); 
    } 

    return $values; 
} 

你可以找到更多​​

0

你可以用jquery做第一部分 - 觀察yes_no字段的更改並顯示/隱藏answer字段。 然後用一個自定義驗證器,你可以做你需要的測試。

+0

我怎樣才能讓這些驗證器? –