2011-11-26 41 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

我怎样才能让这些验证器? –